xxxxxx15 |xxxxxx02|RM99999 |xxxxxx |アンクール|xxxxx |xxxxxxxx|M|xxxxxxxx|
10を65に変えたいです。ワードローブにたくさんsed -i '/^.\{20\}RM99999/ s/^\(?:[^|]*\|\)\{16\}\([^|]*\)/\165/' test.txt
ただし、最初の文字を65に置き換えます(より多くの場所にある可能性がありますが、行のRM99999
20番目の文字を置き換える必要があります)。RM99999
ベストアンサー1
XYの問題のようです。
awkを使ってみてはいかがでしょうか?
awk -F\| -v OFS=\| '$3=="RM99999" && $17 == 10 { $17=65 } {print ; } '
どこ
-F\|
awkに|をフィールド区切り文字として使用するように指示する(\
シェルにエスケープを指示する|
)-v OFS=\|
レコードを出力するときにフィールドを区切り文字として使用するようにawkに指示します。$3=="RM99999" && $17 == 10
RM99999は3行目、10は17行目を選択してください。$17 = 65
65に交換{ print ; }
変更されたパターンと変更されていないパターンの両方を印刷する