SED命令删除字符串末尾的单词

SED命令删除字符串末尾的单词,sed,Sed,我想删除文件中字符串的最后两个单词 我首先使用此命令删除最后一个单词。但我做不到。有人能帮我吗 sed 's/\w*$//' <file name> 我想删除数值和括号中的数值 输出: asbc/jahsf/jhdsflk/jsfh/ 看起来在你想要保留的东西和你想要摆脱的东西之间有一个标签。我面前没有linux,但是试试这个 sed 's/\t.*//' 这是假设字符串的格式总是相同的,这是我从你的评论中得到的。看起来在你想要保留的内容和你想要删除的内容之间有一个标

我想删除文件中字符串的最后两个单词

我首先使用此命令删除最后一个单词。但我做不到。有人能帮我吗

sed 's/\w*$//' <file name>
我想删除数值和括号中的数值

输出:

asbc/jahsf/jhdsflk/jsfh/     

看起来在你想要保留的东西和你想要摆脱的东西之间有一个标签。我面前没有linux,但是试试这个

sed 's/\t.*//'

这是假设字符串的格式总是相同的,这是我从你的评论中得到的。

看起来在你想要保留的内容和你想要删除的内容之间有一个标签。我面前没有linux,但是试试这个

sed 's/\t.*//'
这是假设您的字符串的格式总是相似的,这是我从您的评论中得到的。

使用GNU sed:

$ sed -r 's/([[:space:]]+[-+.()[:alnum:]]+){2}$//' file
asbc/jahsf/jhdsflk/jsfh/
工作原理
  • [[:space:]+
    匹配一个或多个空格

  • [-+。()[:alnum:]+
    匹配允许包含任意数量的加号或减号、句点、括号或任何字母数字字符的“单词”

    请注意,当句点位于方括号内时,
    [.]
    ,它只是一个句点,而不是通配符:不需要转义

  • ([[:space:]+[-+。()[:alnum:]]+)
    匹配一个或多个后跟单词的空格

  • ([[:space:]+[-+.()[:alnum:]+){2}$
    匹配两个单词及其前面的空格

注意字符类的使用,如
[:space://code>和
[:alnum://code>。与旧式类(如
[a-zA-Z0-9]
)不同,这些类是unicode安全的

OSX(BSD)sed 以上内容在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:]
    匹配数字后面的空格

  • *
    匹配下面的任何内容

使用GNU-sed:

$ sed -r 's/([[:space:]]+[-+.()[:alnum:]]+){2}$//' file
asbc/jahsf/jhdsflk/jsfh/
工作原理
  • [[:space:]+
    匹配一个或多个空格

  • [-+。()[:alnum:]+
    匹配允许包含任意数量的加号或减号、句点、括号或任何字母数字字符的“单词”

    请注意,当句点位于方括号内时,
    [.]
    ,它只是一个句点,而不是通配符:不需要转义

  • ([[:space:]+[-+。()[:alnum:]]+)
    匹配一个或多个后跟单词的空格

  • ([[:space:]+[-+.()[:alnum:]+){2}$
    匹配两个单词及其前面的空格

注意字符类的使用,如
[:space://code>和
[:alnum://code>。与旧式类(如
[a-zA-Z0-9]
)不同,这些类是unicode安全的

OSX(BSD)sed 以上内容在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:]
    匹配数字后面的空格

  • *
    匹配下面的任何内容

这可能适合您(GNU-sed):

或者,如果您愿意:

sed -r 's/(\s+\S+){2}\s*$//' file
这将匹配并删除:一个或多个空格,后跟一个或多个非空格两次,后跟行末尾的零个或多个空格。

这可能适用于您(GNU-sed):

或者,如果您愿意:

sed -r 's/(\s+\S+){2}\s*$//' file

这将匹配并删除:一个或多个空格,后跟一个或多个非空格两次,后跟行末尾的零个或多个空格。

谢谢您的解释。“我现在明白它是怎么工作的了。”约翰,我想再问你一个问题。如果我想删除-0.001之后的所有字符串,我可以做什么。示例:asbc/jahsf/jhdsflk/jsfh/-0.001(检查:abs-sjkfd-jks)@SKG-OK。我添加了一个解决方案。你没有说你想要什么。我选择了对匹配进行相当严格的限制:它必须是一个带小数点的数字和小数点后的一个或多个数字,所有数字后面至少有一个空格。谢谢您的解释。“我现在明白它是怎么工作的了。”约翰,我想再问你一个问题。如果我想删除-0.001之后的所有字符串,我可以做什么。示例:asbc/jahsf/jhdsflk/jsfh/-0.001(检查:abs-sjkfd-jks)@SKG-OK。我添加了一个解决方案。你没有说你想要什么。我选择使匹配具有相当的限制性:它必须是一个带小数点的数字和小数点后的一个或多个数字,所有数字后面至少有一个空格。