SEDを使用してキャプチャされたグループの交換

SEDを使用してキャプチャされたグループの交換

xxxxxx15 |xxxxxx02|RM99999 |xxxxxx |アンクール|xxxxx |xxxxxxxx|M|xxxxxxxx|

10を65に変えたいです。ワードローブにたくさんsed -i '/^.\{20\}RM99999/ s/^\(?:[^|]*\|\)\{16\}\([^|]*\)/\165/' test.txt

ただし、最初の文字を65に置き換えます(より多くの場所にある可能性がありますが、行のRM9999920番目の文字を置き換える必要があります)。RM99999

ベストアンサー1

XYの問題のようです。

awkを使ってみてはいかがでしょうか?

awk -F\| -v OFS=\| '$3=="RM99999" && $17 == 10 { $17=65 } {print ; } '

どこ

  • -F\|awkに|をフィールド区切り文字として使用するように指示する(\シェルにエスケープを指示する|
  • -v OFS=\|レコードを出力するときにフィールドを区切り文字として使用するようにawkに指示します。
  • $3=="RM99999" && $17 == 10RM99999は3行目、10は17行目を選択してください。
  • $17 = 6565に交換
  • { print ; }変更されたパターンと変更されていないパターンの両方を印刷する

おすすめ記事