次の形式があります。
983243 woiewewrsadhjf 234
093111 srewdslkjfdgdsdsf 111
sedを使用して3番目のフィールドからテキストのすべてのインスタンスを取得し、そのインスタンスのみを変更し、他の3番目のフィールドを変更しないことはできますか?したがって、3番目のフィールドで111を検索すると、111を含む3番目のフィールドはすべて別のテキストに変更され、他の3番目のフィールド(234など)はそのまま残ります。
可能であれば、コマンドがどのように構成されているかを理解できるように、このソリューションを分析できますか?私は学ぶためにここにいます。
ベストアンサー1
これが必須ではない場合、解決策sed
は次のとおりですawk
。
awk '$3=="111"{$3="othertext"}1' input.txt
各行に対して、3番目のフィールド(デフォルトではスペースで区切られた文字グループとして識別されます)が同じであることを確認し111
、そうである場合はに設定しますothertext
。入力データが異なる区切り記号(例)を使用している場合は、コマンドラインオプション(例)を使用して指定する必要がTAB
あります。-F
awk -F'\t' '....'
1
ルールブロックの外側({ ... }
または実際に「true」/ 0ではないと評価されるすべての条件)は、すべての修正を含むawk
現在の行を印刷するように指示します。これにより、変更する必要のない行が「現状のまま」印刷されます。
注:個々のフィールドで変更する必要がある行は、内部的に単一のスペースに設定されたawk
変数として格納されている「出力フィールド区切り文字」を使用して再構成されます。OFS
これは通常問題ではありませんが、列が複数のスペースで区切られている場合、これらの区切り文字は(デフォルトでは)次のように解釈されます。シングル変更されたフィールド区切りとして出力に行が表示されるように区切り記号を入力します。