たくさんの行があるファイルで、で始まる行を削除したいHERE IT IS。
コマンドラインツールのみを使用してこれを行うにはどうすればよいですか?
たくさんの行があるファイルで、で始まる行を削除したいHERE IT IS。
コマンドラインツールのみを使用してこれを行うにはどうすればよいですか?
回答:
試してくださいsed:
sed -i '/^HERE IT IS/d' <file>
警告:次の-iスイッチを使用する場合は、バックアップを取ることをお勧めしますsed。
sed -i.bak '/^HERE IT IS/d' <file>
元のファイルはそのまま残り<file>.bak、変更されたファイルはになります<file>。
sed -i 's/^HERE IT IS/HERE IT IS\n/' <file>
sed '/^HERE IT IS/G' file。
あなたが受け取った非常に良いgrepとsed答えに加えて、同じことを行うことができるいくつかの他のツールがあります:
Perlのいくつかの方法:
perl -ne '/^HERE IT IS/ || print' file > newfile
perl -ne 'print if !/^HERE IT IS/' file > newfile
perl -ne 'print unless /^HERE IT IS/' file > newfile
-i任意の例にスイッチを追加して、ファイルをその場で編集できます。
perl -i.bak -ne '/^HERE IT IS/ || print' file
(g)awk
awk '!/^HERE IT IS/' file > newfile
GNU awk(awkLinux のデフォルト)の新しいバージョン(4.1.1以降)もファイルをその場で編集できます:
gawk -i inplace '!/^HERE IT IS/' file
シェル(bash、zsh、ksh、おそらく他の人)。これは一種のばかげたことですが、実行できますが、他のツールの方が優れています。
while IFS= read -r line; do
[[ $line =~ ^"HERE IT IS" ]] || printf "%s\n" "$line"
done < file > newfile
bashLOL一つが私を作った)
printf "%s\n" "$line":空白を保持するために$ lineを引用し、いくつかのエコーの問題を回避します(特殊な文字の解釈など)。追加する必要--もありません。
IFS=と-r私もすべての道を行くと、それは堅牢なことがあり、。
別のpythonオプション:
#!/usr/bin/env python3
[print(l, end = "") for l in open(f).readlines() if not l.startswith("HERE IT IS")]
ここで、fは引用符で囲まれたファイルへのパスです。
グレップ
grep -P '^(?!HERE IT IS)' file
(?!HERE IT IS)文字列が後に続かない場合にのみ、正規表現エンジンがすべての行開始境界(通常はと一致する^)に一致するようにする負の先読みアサーションHERE IT IS
python
#!/usr/bin/python3
import sys
fil = sys.argv[1]
with open(fil) as f:
for line in f:
if not line.startswith('HERE IT IS'):
print(line, end="")
スクリプトをファイルに保存script.pyし、端末で次のコマンドを実行して実行します。
python3 script.py infile
[print(l, end = "") for l in open(fil).readlines() if not re.match("HERE IT IS", l)]に正規表現を使用できますが、のように効率的ではありませんstartswith。[print(l, end = "") for l in open(f).readlines() if not l.startswith("HERE IT IS")]リストの出力をどのように生成しないのか疑問に思いました。
vim:vim '+g/^HERE IT IS/d' +wq test.txt;)