代替行にsedを使用する

代替行にsedを使用する

次のパターンのファイルがあります。

12345.ABC9998
12345555.abc:ffr.abc-MKDHJKSJJDOKSOKSDCKJODCKJ

12345.ABC9998
12345555.abc:ffr.abc-MKDHJKSJJDOKSOKSDCKJODCKJ

ダッシュの前のすべての項目を削除し、2行目の各行にダッシュ自体を含めたいです。

予想出力:

12345.ABC9998
MKDHJKSJJDOKSOKSDCKJODCKJ

12345.ABC9998
MKDHJKSJJDOKSOKSDCKJODCKJ

私はsed 's/^[^A-Z]*//' file.txtこれが可能であることを知っていますが、すべての行に対して動作します。目的の行(他のすべての行)でのみ機能するように編集するにはどうすればよいですか?

答え1

ダッシュを含む行でのみ作業したい場合(あなたの例ではそうです)、次はうまくいきます。

sed 's/^.*-//' file.txt

ダッシュを含む各行の先頭にあるすべてのコンテンツが削除されます。他にもダッシュのない行では正規表現が一致しないため、置換を行わずに行をそのままにします。


必要なものが他のすべての行に変換を適用する場合は、コマンドsedn「次へ」を意味)を使用して1行をスキップしますが、それでも出力に送信できます。

これは実際に偶数行で作業したいと思います(あなたの例ではブロック間に空の行があり、コピーして貼り付けるアーティファクトであると仮定します)、質問のタイトル「代替行」が実際に欲しいものであるとします。 .)

このコマンドは、偶数行にのみ正規表現を適用します。

sed 'n;s/^[^A-Z]*//' file.txt

答え2

これにより、2行目ごとにダッシュまですべての内容が削除されます。

sed '0~2s/.*-//' infile

次の行から次の行を削除するには、12345.ABC9998次の手順を実行します。

sed '/^12345.ABC9998$/{n; s/.*-//}' infile

文字列を含む行の後の2行目を削除したい場合は、12345.ABC9998次のようにします。

sed '/12345.ABC9998/{n; s/.*-//}' infile

答え3

別の行ごとに、大文字の前にあるすべての項目を削除するようにコマンドを指定できます。これにより、ダッシュ以前のすべてのアイテムとダッシュ自体を適切に削除できます。

sed -i '0~2s/[^A-Z]*//' file

関連情報