次のsedコマンドは期待どおりに機能しています。私がする必要があるのは、2番目の列でのみnull(\ n)を0に変更することです。
# cat nulltest.txt
1 abc
1 \N
\N xyz
# sed 's/\\N/0/' nulltest.txt
1 abc
1 0
0 xyz
推測される結果 :
1 abc
1 0
\N xyz
データはタブ「\t」で区切られます
kent$ echo "1 abc
1 \N
\N xyz"|awk '{gsub(/\\N/,"0",$2)}1'|column -t
1 abc
1 0
\N xyz
sed
式で以下の正規表現を使用して\N
、2番目の列にあることを確認できます。
^([^\t]+\t)\\N(\t)
したがって、sed
式は次のようになります。
sed -r -i 's/^([^\t]+\t)\\N(\t)/\10\2/g' nulltest.txt
説明:
^([^\t]+\t)
:一致し、その後に正規表現が1
続き、最初のグループになります。\t
()
\\N
:一致します\N
(\t)
:tab
2番目のグループである後の2番目の列です。
sed
通知の置換セクションでは、\1
とを使用します。これは、正規表現\2
の最初のグループと2番目のグループを表します。したがって、グループ1と2を保持し、一致した文字列の残りを。に置き換えます。1 followed by \t
\t
0
私のテストでは、以下の入力ファイルを使用しました
abcdefgh
3 abc \N \N \N
123 \N \N \N
\N \Nxyz
そして私が得る出力は
abcdefgh
3 abc \N \N \N
123adsa 0 \N \N
\N \Nxyz
\N
from2nd
列が置き換えられていることに注意してください。\N
このsed式の列がいくつあっても、列\N
からのみ置き換えられ2nd
ます。
これを試して:
sed -r 's/^([^\t]+\t)\\N/\10/' nulltest.txt