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' 我无法正确地用 $2 替换 reg 表达式

任何快速帮助、提示或技巧?

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

一种使用方式awk

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

结果:

Text Text2 Text2
Text Text4 Text3
于 2012-10-16T06:12:27.957 回答
2

使用 GNU sed \Sand\s可以分别表示非空格和空格,所以你可以像这样完成你想要的:

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

emptys///命令隐式使用来自 的匹配项//

如果它在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 回答