0

簡単な変更を加える必要があるファイルがあります。通常、問題はありませんが、列がほぼ同じであるため、気が遠くなります。

いくつかの例:

net_192.168.0.64_26 192.168.0.64_26  
net_192.168.0.128-26 192.168.0.128-26 

通常、ストリームでは 2 番目の列を変更するだけですが、これをファイルに書き込む必要があり、混乱します。

次の文字列は必要なことを行いますが、最初の列への可視性を失い、有用な場所にパイプできません:

cat file.txt | awk '{print $2}' | sed 's/1_//g;s/2_//g;s/1-//g;s/2-//g;s/_/\ /g;s/-/\ /g' | egrep '[[:digit:]]{1,3}\.[[:digit:]]{1,3}\.[[:digit:]]{1,3}\.[[:digit:]]{1,3}'

出力は次のようになります (サブネットは 3 列目になります)。

net_192.168.0.64_26 192.168.0.64 26  
net_192.168.0.128-26 192.168.0.128 26 

両方の列を表示したまま、新しいファイルにパイプしたり、古いファイルを変更したりできるようにしながら、上記の行を実行するにはどうすればよいですか。

ありがとう!

4

3 に答える 3

2

大丈夫な場合は、これを試してください:

awk '{gsub(/[_-]/," ",$2)}1' file

サンプル テキストでテストします。

kent$  echo "net_192.168.0.64_26 192.168.0.64_26  
net_192.168.0.128-26 192.168.0.128-26"|awk '{gsub(/[_-]/," ",$2)}1'
net_192.168.0.64_26 192.168.0.64 26
net_192.168.0.128-26 192.168.0.128 26
于 2013-03-27T15:43:47.747 に答える
1

_文字,-を2番目のフィールドの単一のスペースに置き換えたいだけの場合:

$ awk '{gsub(/[-_]/," ",$2)}1' file
net_192.168.0.64_26 192.168.0.64 26
net_192.168.0.128-26 192.168.0.128 26
于 2013-03-27T15:43:56.763 に答える
1

そしてsedバージョン:

sed 's/\(.*\)[-_]/\1 /' file
于 2013-03-27T19:54:40.600 に答える