删除文件中每行上2个特殊字符串之间的字符串

时间:2014-02-19 06:47:07

标签: shell sed awk grep

使用awk我需要在第一个“。”之间找到字符。和第一个空格“”(如果存在)并用空格“”替换它。 我有这个结构的文件(test.txt):

asdf.test.com 04-05-2014  
qwer.test1.test.com 04-05-2014  
asdfgg 04-05-2014  
sadf  
asdff.com 04-05-2014 

我需要这个输出:

asdf 04-05-2014  
qwer  04-05-2014  
asdfgg  04-05-2014  
sadf  
asdff  04-05-2014 

4 个答案:

答案 0 :(得分:2)

使用sed,可以解决行尾空间的问题。

sed 's/\.[^. ]*//g' file

答案 1 :(得分:1)

awk NF=NF FS='\\..+ ' test.txt

结果

asdf 04-05-2014
qwer 04-05-2014
asdfgg 04-05-2014
sadf
asdff 04-05-2014

答案 2 :(得分:0)

尝试sed:

cat test.txt | sed 's/\..*\ / /g'

答案 3 :(得分:-1)

这应该做:

awk '{sub(/\..*/,x,$1)}8' test.txt
asdf04-05-2014
qwer04-05-2014
asdfgg 04-05-2014
sadf
asdff04-05-2014

根据宝马的建议更新,因为行尾有空白。


或者这个:

awk -F"[. ]" '{print $1,(NF>1?$NF:x)}' test.txt
asdf 04-05-2014
qwer 04-05-2014
asdfgg 04-05-2014
sadf
asdff 04-05-2014