4

ファイルをループして特定の行を削除したい。サンプルファイル:

test.txt

a
b
c
d

私が持っているもの:

FILE=/tmp/test.txt
while read FILE
do
  # if the line starts with b delete it otherwise leave it there
  ?
done
4

4 に答える 4

9

sedこれは- UNIX ストリーム エディタの仕事です:

(sed '/^b/d' yourfile > yourfile~ && mv yourfile~ yourfile) || rm yourfile~

このコマンドは、a で始まるすべての行を削除しb、残りの行をバックアップ ファイルに書き込みます。これが成功すると、バックアップ ファイルの名前が元のファイルに変更されます。失敗すると、バックアップ ファイルは削除されます。

于 2013-07-05T15:22:43.800 に答える
4

あなたはgrep onelinerでそれを行うことができます:

grep -v "^b" test.txt > newfile
于 2013-07-05T15:24:15.623 に答える
3

bash の組み込み機能を使用して簡単に実行できます。

while read -r; do
  [[ $REPLY = b* ]] || printf '%s\n' "$REPLY"
done <file >file.new
mv file.new file
于 2013-07-05T15:25:17.270 に答える
0

"Perl ... それはあなたの$PATH" :-)にあるかもしれません

BSD 、OSX、Linux、AIX、Solarisでの小さなテキストタスク($SHELLつまりsh、そして、多くのサーバー システム上の古いバージョンのツールは... 難しい場合があります。kshzshbashtcshcshsedgrepgawkawk

perl -i.orig -ne 'print unless /^b/' test.txt

うまくいきましたか?

diff test.txt test.txt.orig
于 2013-07-05T19:50:05.047 に答える