如何删除特定单词后的特定字符

如何删除特定单词后的特定字符

如何删除,特定单词后面的字符?

例如我想删除,单词后面的字符IBM

  IBM, Inc.:APP-VM-Core:4.4.2.0:04,

预期结果应该是

  IBM Inc.:APP-VM-Core:4.4.2.0:04,

同时我做了以下事情

   echo “IBM, Inc.:APP-VM-Core:4.4.2.0:04,” | sed s'/,//'

但问题是它会删除每个,字符,无论 之前的第一个单词是什么,。就我而言,我想删除,之后的唯一内容IBM

例子:

echo "APPLE, Inc.:APP-VM-Core:4.4.2.0:04,"| sed s'/,//'

APPLE Inc.:APP-VM-Core:4.4.2.0:04,

但应该是

APPLE, Inc.:APP-VM-Core:4.4.2.0:04, 

答案1

尝试:

$ echo "IBM, Inc.:APP-VM-Core:4.4.2.0:04," | sed '/^ *IBM/s/,//'
IBM Inc.:APP-VM-Core:4.4.2.0:04,

或者:

$ echo "IBM, Inc.:APP-VM-Core:4.4.2.0:04," | sed 's/^\( *IBM\),/\1/'
IBM Inc.:APP-VM-Core:4.4.2.0:04,

答案2

如果您尝试修改文件,您宁愿使用exored但绝对不使用sed。为什么不sed

sed是一个SEDitor,您可以用它修改来自流的数据。

使用ex你可以执行以下操作

ex -sc '%s/IBM,/IBM/g|x' file 你的文件名在哪里file

作为替代方案。如果你想删除前导空间或者选项卡您将需要超过^ *.例如。解决方案将使用awk如下:

awk '{sub(/^[ \t]+IBM,/,"IBM");};1' input_file > output_file

或者

awk '{sub(/^[[:blank:]]*IBM,/,"IBM");};1' input_file > output_file

提个醒。^ *将无法检测到选项卡

您还可以ex按照前面的说明使用,但现在包括正则表达式来仅匹配以空格开头并包括模式的行国际商业机器公司

ex -sc '%s/^[[:blank:]]*IBM,/IBM/g|x' input_file

相关内容