すべての奇数行に表示される特定の文字の後のすべてのテキストを削除します。
これはsedファイルのすべての行で機能します。
sed 's/;.*//'
すべての奇数行のみを処理するようにこのsed行をどのように編集できますか?
答え1
GNUの使用sed
:
$ sed '1~2s/;.*//' file
アドレス範囲は1~2
ライン 1 と一致し、その後は他のすべてのラインと一致します。一般的なケースは、first~step
マニュアルの例がすべてのsed -n 1~2p
奇数行を印刷することです。
これはGNU拡張です。
以下の該当するコンテンツawk
:
$ awk 'NR % 2 { sub(";.*", "") } { print }' file
またはArrowがコメントで提案したように:
$ awk -F';' 'NR % 2 { $0 = $1 } { print }' file
同じ効果がありますが、最初の項目以降のすべての内容を明示的に置き換えるのではなく、フィールド区切り文字として使用されます(フィールドを;
使用)。;
-F';'
答え2
この機能はすべてのsed
バージョンで動作できますが、GNU sed
テスト済みです。
$ cat ip.txt
foo;bar-baz;xyz
a;b;c
good bad. hi there
d;e
cool;hot;normal
$ sed 's/;.*//;n' ip.txt
foo
a;b;c
good bad. hi there
d;e
cool
このn
コマンドは次の行を取得しますが、何も変更しません。実際には奇数行だけを変更できます。
そしてperl
perl -pe 's/;.*// if $.%2' ip.txt
ここではif $.%2
、行番号が奇数の場合にのみ置換を実行する条件を追加します。