基本上我需要这个问题的OP得到但不想要的东西。 如何删除文件中特定模式或字符串之后的所有内容?
所以我得到的数据如下:
Something and something ........................... 23
Another one .......................................123
Somethingelse Inc. .................................243
所以我想要的是删除空格后的整堆点(和数字)。
到目前为止,我尝试在那里使用OP的命令,但它并没有像我预期的那样工作,因为它会删除遇到的第一个点之后的所有内容。这意味着 Somethinelse Inc. 类别数据上的点也被删除。
我试图通过用三个点替换第一个 .com 并将第二个 .com 替换为空格来使该问题的第一个(sed)答案起作用,但我失败了。这次删除第一个空格或留下三个点之后的所有内容。
第二个答案(前-sc ...)就像OP想要的那样,但它给我留下了一些点,所以我也没有运气。
我还尝试根据此答案调整命令,但也失败了。如何从一行中删除一个模式之前的所有内容以及另一个模式之后的所有内容?
答案1
sed 's/ \.\..*$//' /path/to/file
应该管用:
\.\. - A space followed by two literal periods
.* - One or characters of any type
$ - End of line
答案2
另一个但不优雅的解决方案可能是:
cat path/to/yourfile | sed -E "s/[\.]{2,}//g" | sed "s/[0-9]//g" > path/to/new_file
在哪里:
-E
将正则表达式解释为扩展(现代)正则表达式[\.]{2,}
每出现两次或多次就匹配一个点[0-9]
匹配所有数字s/expr//g
表示expr
尽可能不匹配任何内容的替代品 (g)
答案3
这个怎么样:
sed 's/\.\+ *[[:digit:]]\+[[:space:]]*$//g'
意思是:
一对+多(\+)点(\.)并且零到多(*)空间( )以及一对多(\+) 数字([[:数字:]])并且以防万一(*) 空白 ([[:空间:]])AND 本行末尾 ($)
测试(请注意,我在第二行插入了“...234”,并尾随制表符/空格):
Something and something ........................... 23<Tab>
An ...234 other one .......................................123<space>
Somethingelse Inc. .................................243<some spaces>
结果:
xb@dnxb:/tmp$ sed 's/\.\+ *[[:digit:]]\+[[:space:]]*$//g' sample.txt
Something and something
An ...234 other one
Somethingelse Inc.
xb@dnxb:/tmp$