删除文本文件

时间:2015-06-08 15:23:05

标签: bash shell text awk sed

以下数据代表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

3 个答案:

答案 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:

  1. 您也可以使用ex:^或#etc中的其他字符代替sed命令中的/。
    例如: sed -i" s#koba#loki#g" FILENAME.TXT

  2. -i 选项(我上面使用过)会更新文件(即就地更新)而不是在屏幕上抛出std输出。在您确定要更新的内容之前,请不要使用-i。首先备份给定文件,有时会有所帮助。