UNIX命令行文件编辑功能

时间:2013-11-20 11:11:49

标签: shell unix command-line

再回到另一个问题。

我现在拥有的文件格式如下:

1234,
1234,
1-23-4

我想用这个文件做两件事。

首先,删除第三行中的-个字符。因此,1-23-4 ==> 1234

其次,我想把它全部打印成一行。

最终结果如下:

1234,1234,1234

这是否可以在脚本中使用行命令?请建议。

提前感谢您的时间和帮助。

3 个答案:

答案 0 :(得分:4)

使用tr

$ tr -d '\n-' < a | sed 's/$/\n/'
1234,1234,1234

删除连字符:

$ tr -d '-' < file
1234,
1234,
1234

同样适用于\n的新行。

当我们删除所有新行时,它将错过完成的行。要恢复它,我们使用sed

$prompt tr -d '\n-' < a
1234,1234,1234$prompt

$ tr -d '\n-' < a | sed 's/$/\n/'
1234,1234,1234

  

谢谢fedorqui。我试过这个。我用文件名替换了文件但是它   没有为我创建一个具有最终格式的新文件。抱歉,我想   我应该在问题中提到这一点。我的坏。

没问题。你只需要重定向它:

$ tr -d '\n-' < a | sed 's/$/\n/' > new_file
$ cat new_file 
1234,1234,1234

答案 1 :(得分:1)

tr是个好人。

另一方面是perl:

perl -pne 's/[-\n]//g' your_file
  • -n - &GT;这将作为文件中每一行的while循环。

  • -e - &GT;在此之后的事情只不过是每一行都会表现出来的表达。

  • -p - &GT;在每行执行表达式后打印每一行。

    S /搜索/替换/克

  • s/搜索换行符或“ - ”/替换为空字符/ g - 表示该行中的所有出现。

答案 2 :(得分:1)

(gnu)awk:

awk -v RS="\0" 'gsub(/[\n-]/,"")' file

测试

kent$  echo "1234,
1234,
1-23-4"|awk -v RS="\0" 'gsub(/[\n-]/,"")'
1234,1234,1234