Bashからファイルの特定の行を削除したいです。
sed
現在私がやっていることは、この行を削除するために行番号を取得して渡すことです。
awk '/qr/{ print NR; exit }' test | sed -i "${1}d" test
ウィジェットはawk
正常に動作しますが、この状態ではsed
ウィジェットはファイル(testという名前)の内容をすべて削除します。
ただし、変数なしでこれを実行すると、次のようになります。
sed -i '1d' test
良い結果。
私は何が間違っていましたか?
ベストアンサー1
${1}
現在、コンテキストの最初の引数に置き換えられ、awk
例の出力から何も読みません。
awk
sumを維持したい場合、sed
1つの方法はの出力をawk
変数に格納することです。
line=$(awk '/qr/{ print NR; exit }' test); sed -i "${line}d" test
ただし、ファイルに「qr」を含む行がないと、正しく機能しません。
より良いアプローチは、以下を使用することですsed
。
sed -i "/qr/d" test
ただし、これにより、最初の行だけでなく、一致するすべての行も削除されます。
AWK(またはgawk
GNU実装、バージョン4.1.0以降)は上記と同じです。
gawk -i inplace '!/qr/' test
または、最初のインスタンスのみを置き換えるには
gawk -i inplace '/qr/ && !i { i++; next; } 1' test