如果空格/换行不在前后,则用下划线替换每个点

时间:2016-07-15 15:32:41

标签: awk sed

假设我有以下文件

asdfa .a
xsf. asdfa
 . xasdf
asdfasfd.sadfa.
asdfa .a
xsf. asdfa
 . 3xasdf
asdfasfd2.sadfa.

而且,我希望得到这个:

asdfa .a
xsf. asdfa
.xasdf
asdfasfd_sadfa.
asdfa .a
xsf. asdfa
 . 3xasdf
asdfasfd2_sadfa.

基本上,如果满足以下所有条件,则必须用下划线替换每个点:

  1. 点之前和之后没有空白字符以及标签。
  2. 点不在行的开头。
  3. 点不在行的末尾。
  4. 更新 所以,我只能提出sed 's/\./_/g'。但是,这取代了每一个点。

2 个答案:

答案 0 :(得分:2)

这里sed闪耀

$ sed -r 's/(\S)\.(\S)/\1_\2/g' file

答案 1 :(得分:1)

我认为这应该可以解决问题

sed -i 's/\(\w\)\(\.\)\(\w\)/\1_\3/g' mytextfile.txt