0

次の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」で区切られます

4

3 に答える 3

2
kent$  echo "1   abc
1   \N
\N  xyz"|awk '{gsub(/\\N/,"0",$2)}1'|column -t
1   abc
1   0
\N  xyz
于 2012-08-01T13:33:09.707 に答える
1

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)tab2番目のグループである後の2番目の列です。

sed通知の置換セクションでは、\1とを使用します。これは、正規表現\2最初のグループと2番目のグループを表します。したがって、グループ1と2を保持し、一致した文字列の残りを。に置き換えます。1 followed by \t\t0

私のテストでは、以下の入力ファイルを使用しました

abcdefgh
3   abc \N  \N  \N
123 \N  \N  \N
\N  \Nxyz

そして私が得る出力は

abcdefgh
3   abc \N  \N  \N
123adsa 0   \N  \N
\N  \Nxyz

\Nfrom2nd列が置き換えられていることに注意してください。\Nこのsed式の列がいくつあっても、列\Nからのみ置き換えられ2ndます。

于 2012-08-01T13:33:36.993 に答える
0

これを試して:

sed -r 's/^([^\t]+\t)\\N/\10/' nulltest.txt
于 2012-08-01T12:12:55.730 に答える