2012-10-16 95 views
2

文件替換特定$ 3貌似

$1 $2  $3 

Text Text2 * 

Text Text4 Text3 

我想在一個文件中搜索*'s並與在列中的文本旁邊更換。在保持信息的休息... basicly logicaly與列2

目前,我與任何awk或者sed

awk : awk '{ if($3=*) {print$2}}'工程工作更換* ...但我想保持$ 1,2藏漢

sed : sed -r 's/[*]//g'我不能讓reg表達式與$ 2正確

任何快速幫助,提示或技巧更換?

+0

謝謝! :DI享受在命令行中,並會堅持下去 –

回答

2

內容:

Text Text2 * 
Text Text4 Text3 

一種使用awk方式:

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

結果:

Text Text2 Text2 
Text Text4 Text3 
+0

無論你的答案幫我寫的awk '{如果($ 90元== 「*」){$ 3 = $ 2} {打印$ 0}}'> file.txt的的,你可以一個解釋你所擁有的「1」,它可以打印出我從未見過的那一行。 –

+0

在'awk'中,大括號後的'1'只是'print $ 0'的簡寫。 – Steve

+0

太棒了,我知道基礎知識,並且似乎寫了一個長手。好戲 –

2

AWK溶液:的file.txt

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

隨着GNU sed的\S\s可以用來分別表示非空間和空間,讓你可以完成你想要的是這樣的:

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

s///命令隱式使用,與從//

如果由史蒂夫列出的輸入運行:

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/'