以下数据代表2行文本文件:
1 2340: 2 1930: 1
1 9: 3 4501: 1 45: 1 5620: 2
我想删除“:”之后的空格。所以上面文本文件的输出应该是
1 2340:2 1930:1
1 9:3 4501:1 45:1 5620:2
答案 0 :(得分:2)
您可以使用:
$ sed -e s"/: /:/g" file.dat
1 2340:2 1930:1
1 9:3 4501:1 45:1 5620:2
说明:
sed -e "COMMAND"
将通过file.dat`执行命令。
s
说替代/: /:/
是要替换的链和所需的链,由/
分隔。g
告诉sed
每行执行多次。正如@Tom评论的那样,引号是更好的单引号,并且-e
不是必需的,那么:
$ sed 's/: */:/g' file.dat
1 2340:2 1930:1
1 9:3 4501:1 45:1 5620:2
编辑2 正如@josifoski评论的那样,空格char之后的*将允许多个空格,而不仅仅是一个
您可以在此处阅读一些sed
文档:
AWK GSUB
$ awk '{gsub(/: */,":"); print}' file.dat
1 2340:2 1930:1
1 9:3 4501:1 45:1 5620:2
答案 1 :(得分:2)
$ awk -F': ' -v OFS=":" '{$1=$1}1' file
1 2340:2 1930:1
1 9:3 4501:1 45:1 5620:2
答案 2 :(得分:1)
使用以下:如果您要替换":"字符后跟单个/多个空格(""或" \ t"又称制表符)。
sed -i "s/:[ \t][ \t]*/:/g" filename.txt
或者如果您只想替换":"只有一个可见空间进入":"
sed -i "s/:[ \t]/:/g" filename.txt
PS:
您也可以使用ex:^或#etc中的其他字符代替sed命令中的/。
例如: sed -i" s#koba#loki#g" FILENAME.TXT 强>
-i 选项(我上面使用过)会更新文件(即就地更新)而不是在屏幕上抛出std输出。在您确定要更新的内容之前,请不要使用-i。首先备份给定文件,有时会有所帮助。