2

ファイルは次のようになります

$1    $2      $3

Text  Text2    *

Text  Text4    Text3

*'sファイル内を検索して、その隣の列のテキストに置き換えたいと思います。*残りの情報を保持しながら...基本的に論理を列2に置き換えます。

現在、sedまたはawkのいずれかを使用しています

awk : awk '{ if($3=*) {print$2}}' 動作します...しかし、私も$1,2を維持したいと思います

sed : sed -r 's/[*]//g' reg式を$2に正しく置き換えることができません

クイックヘルプ、ヒント、またはトリックはありますか?

4

3 に答える 3

2

awkソリューション:

awk '$3=="*"{$3=$2}1' file
于 2012-10-16T06:12:06.973 に答える
2

内容file.txt

Text Text2 *
Text Text4 Text3

使用する1つの方法awk

awk '$3 == "*" { $3=$2 }1' file.txt

結果:

Text Text2 Text2
Text Text4 Text3
于 2012-10-16T06:12:27.957 に答える
2

GNU sed\S\s使用すると、非スペースとスペースをそれぞれ表すために使用できるため、次のように目的を達成できます。

sed -r '/(\S+)\s+(\S+)\s+\*/ s//\1 \2 \2/'

空のs///コマンドは、からの一致を暗黙的に使用し//ます。

steveによってリストされた入力で実行される場合:

sed -r '/(\S+)\s+(\S+)\s+\*/ s//\1 \2 \2/' file.txt

出力:

Text Text2 Text2
Text Text4 Text3

列間の空白を保持する場合は、次を使用します。

sed -r '/(\S+)(\s+)(\S+)(\s+)\*/ s//\1\2\3\4\3/'
于 2012-10-16T15:14:16.497 に答える