たくさんの行があるファイルで、で始まる行を削除したい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
(awk
Linux のデフォルト)の新しいバージョン(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
bash
LOL一つが私を作った)
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
;)