awk 最初のパターン(含む)の後の各行にあるすべてのテキストを印刷します。

awk 最初のパターン(含む)の後の各行にあるすべてのテキストを印刷します。

作業例:

オリジナル:

% echo -e "This is number 800 with decimal;other stuff\n44333; more data"
This is number 800 with decimal;other stuff
44333; more data

欲しいawk結果:

% echo -e "This is number 800 with decimal;other stuff\n44333; more data" | awk
;other stuff
; more data

更新:すべての回答後:区切り記号 ";"は行ごとに1回だけ存在し、行が存在する場合は存在するため、私の解決策は常に機能しますが、他の解決策ほど一般的ではありません(空白行、区切り文字なしの行、または複数の区切り文字がある行)。

答え1

すべての Unix システムのすべてのシェルで awk または sed を使用します。

awk '{sub(/[^;]*/,"")}1' file

sed 's/[^;]*//' file

ただし、上記のコードはそれを含まないすべての行に対して空の行を印刷するため、これらの行が入力に存在できる;場合は、次のものが必要になる場合があります。

awk '{sub(/[^;]*;/,";")}1' file

sed 's/[^;]*;/;/' file

上記は、;sを含まない行をそのまま印刷するか、その行を削除したいとします。

awk 'sub(/[^;]*;/,";")' file

sed -n 's/[^;]*;/;/p' file

答え2

awk -F ';' 'BEGIN { OFS=FS } { $1 = "" }; 1'

次に、各行の - で区切られたフィールドを読み取り、;最初のフィールドを空の文字列に設定します。その後、すべての行は無条件出力フィールド区切り文字として出力されます(孤立した行が1最後に実行する操作)。;

あなたの質問にデータが与えられたら

;other stuff
; more data

別のテスト:

$ cat file
123;456;789
a b c ; d e f ; g h i

abba
;;;;
$ awk -F ';' 'BEGIN { OFS=FS } { $1 = ""; print }' file
;456;789
; d e f ; g h i


;;;;

答え3

表示された例を使用して、次のawkコードを試してください。

echo -e "This is number 800 with decimal;other stuff\n44333; more data" |
awk 'match($0,/^[^;]*/){ print substr($0,RSTART+RLENGTH)}'

;other stuff
; more data

答え4

シンプル

% echo -e "This is number 800;other stuff\n44333; more data" | awk -F';' '{print ";"$2}'
;other stuff
; more data

関連情報