Macos 删除以“开始”开头的单词_&引用;在bash中使用sed在文件中

Macos 删除以“开始”开头的单词_&引用;在bash中使用sed在文件中,macos,bash,sed,Macos,Bash,Sed,鉴于: 我想得到: this is a_REMOVEME test_REMOVEME for the win 我目前拥有的似乎不起作用,因为它只删除了。: this is a test for the win 默认情况下,您的sed版本可能无法理解\w。不要使用\w尝试使用[A-Za-z0-9]或[^]来匹配任何非空格字符。您可能还想尝试sed-re来打开扩展的regexp支持。\w默认情况下,您的sed版本可能无法理解。不要使用\w尝试使用[A-Za-z0-9]或[^]来匹配任何非空格

鉴于:

我想得到:

this is a_REMOVEME test_REMOVEME for the win
我目前拥有的似乎不起作用,因为它只删除了

this is a test for the win  

默认情况下,您的
sed
版本可能无法理解
\w
。不要使用
\w
尝试使用
[A-Za-z0-9]
[^]
来匹配任何非空格字符。您可能还想尝试
sed-re
来打开扩展的regexp支持。

\w
默认情况下,您的
sed
版本可能无法理解。不要使用
\w
尝试使用
[A-Za-z0-9]
[^]
来匹配任何非空格字符。您可能还想尝试
sed-re
来打开扩展的regexp支持。

试试这个

sed -e 's/_\w*//g' myfile.txt
试试这个

sed -e 's/_\w*//g' myfile.txt

有趣的是,如果您已经使用命令行perl实现了这一点。。。这将有助于:

sed -ie 's/_[A-Za-z0-9]* / /g' here.txt

有趣的是,如果您已经使用命令行perl实现了这一点。。。这将有助于:

sed -ie 's/_[A-Za-z0-9]* / /g' here.txt

或者使用
[[:alnum:][]*
-r
可以在Linux上工作,但不能在OSX上工作-即使它在OSX上几乎等价的
-E
,在这里也不起作用,因为OSX sed(至少在OSX 10.9.1中)从不支持快捷字符类,例如
\w
(这需要所谓的增强正则表达式功能-一个独立于扩展正则表达式的维度-遗憾的是,大多数OSX工具都不支持这种功能);
[:alnum:][uu]
代替
\w
是您的朋友。@glennjackman:while
[:alnum:]
在这里已经足够了,让我指出,
\w
的确切等价物是
[:alnum:][uu]
@mklement0哦,我建议
-r
不是为了解决原来的问题,而是因为我不记得
[
需要转义。我不想让OP尝试我的解决方案而变得更加混乱……我想我把事情搞砸了!@dg99明白了;更具体地说:如果你试图在OSX上对sed使用
-r
,你会得到语法错误。
[
]
封装字符集时不需要转义,即使没有
-r
/
-E
。打开
-r
(Linux)/
-E
(OSX)通常是个好主意,不过(转义越少,功能越多)-不幸的是,没有一个标志在两种平台上都能工作。@mklement0,您不想在字符类中包含“quot,因为这是字段分隔符。或者使用
[[:alnum:][]*
-r
在Linux上工作,但在OSX上不工作-即使它在OSX上几乎是等效的,
-E
,在这里也不工作,因为OSX是sed(至少从OS X 10.9.1开始)从不支持快捷字符类,例如
\w
(这需要所谓的增强正则表达式功能-一个独立于扩展正则表达式的维度-遗憾的是,大多数OSX工具不支持它);
[:alnum:][/code>代替
\w
是你的朋友。@Glenjackman:while
[[:alnum:]
在这里已经足够了,让我指出,
\w
的确切等价物是
[:alnum:]
@mklement0哦,我建议
-r
不是为了解决原来的问题,而是因为我不记得
[
需要转义。我不想让OP尝试我的解决方案而变得更加混乱……我想我把事情搞砸了!@dg99明白了;更具体地说:如果你试图在OSX上对sed使用
-r
,你会得到语法错误。
[
]
封装字符集时不需要转义,即使没有
-r
/
-E
。打开
-r
(Linux)/
-E
(OSX)通常是个好主意,不过(转义越少,功能越多)-不幸的是,在两种平台上都没有一个单独的标志。@mklement0,您不想在字符类中包含“u”,因为这是字段分隔符。请注意,如果要删除的模式后面没有空格:
echo“foo_bar baz_qux”| sed's/u[a-Za-z0-9],这将无法完全起作用*//g'
。我会这样写:
sed's/\[:alnum:]*\([[:blank:]\\\\\$\)/\1/g'
如果有多个dashNote,它就不起作用。注意如果要删除的模式后面没有空格:
echo“foo\u bar baz\u qux”\124; sed's/\[a-Za-z0-9]*///g'
。我会这样写:
sed's\[:alnum]*\([[:blank:][\\\;$\)/\1/g'
如果有多个破折号,则此功能不起作用