如何删除,
特定单词后面的字符?
例如我想删除,
单词后面的字符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
如果您尝试修改文件,您宁愿使用ex
ored
但绝对不使用sed
。为什么不sed
?
sed
是一个S
流ED
itor,您可以用它修改来自流的数据。
使用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