次のパターンのファイルがあります。
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
ダッシュを含む各行の先頭にあるすべてのコンテンツが削除されます。他にもダッシュのない行では正規表現が一致しないため、置換を行わずに行をそのままにします。
必要なものが他のすべての行に変換を適用する場合は、コマンドsed
(n
「次へ」を意味)を使用して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