我想删除文件中字符串中的最后2个单词。
我首先使用此命令删除最后一个单词。但我无法做到。有人可以帮助我
sed 's/\w*$//' <file name>
我的字符串就像这样
输入:
asbc/jahsf/jhdsflk/jsfh/ -0.001 (exam)
我想删除数值和括号中的数值。
输出:
asbc/jahsf/jhdsflk/jsfh/
答案 0 :(得分:2)
使用GNU sed:
$ sed -r 's/([[:space:]]+[-+.()[:alnum:]]+){2}$//' file
asbc/jahsf/jhdsflk/jsfh/
[[:space:]]+
匹配一个或多个空格。
[-+.()[:alnum:]]+
匹配&#39;字&#39;允许包含任意数量的加号或减号,句号,parens或任何字母数字字符。
请注意,当句点位于方括号[.]
内时,它只是一个句点,而不是通配符:它不需要转义。
([[:space:]]+[-+.()[:alnum:]]+)
匹配一个或多个空格后跟一个单词。
([[:space:]]+[-+.()[:alnum:]]+){2}$
匹配两个单词及其前面的空格。
请注意使用[:space:]
和[:alnum:]
等字符类。与像[a-zA-Z0-9]
这样的老式类不同,这些类是unicode安全的。
以上是在GNU sed上测试的。对于BSD sed,请尝试:
sed -E 's/([[:space:]][[:space:]]*[-+.()[:alnum:][:alnum:]]*){2}$//' file
这会查找带有可选符号的十进制数字并删除它,它前面的空格以及它后面的所有内容:
$ sed -r 's/[[:space:]]+[-+]?[[:digit:]]+[.][[:digit:]]+[[:space:]].*//' file
asbc/jahsf/jhdsflk/jsfh/
工作原理:
[[:space:]]+
匹配一个或多个空格
[-+]?
匹配零个或一个符号。
[[:digit:]]+
匹配任意位数。
[.]
匹配小数点(句点)。
[[:digit:]]+
匹配小数点后的一个或多个数字。
[[:space:]]
匹配该号码后的空格。
.*
匹配以下内容。
答案 1 :(得分:1)
看起来你想要保留的内容和你想要删除的内容之间有一个标签。我没有在我面前使用linux,但试试这个。
sed 's/\t.*//'
这假设你的字符串总是类似地格式化,这是我从你的评论中得到的。
答案 2 :(得分:1)
这可能适合你(GNU sed):
sed -r 's/\s+\S+\s+\S+\s*$//' file
或者如果您愿意:
sed -r 's/(\s+\S+){2}\s*$//' file
匹配并删除:一个或多个空格,后跟一个或多个非空格两次,后跟行尾的零个或多个空格。