我正在 Ubuntu 12.04.1 LTS 上的 bash shell 中运行此命令。我试图一举删除[
和]
字符,即不必第二次通过管道传输到 sed。
我知道方括号在正则表达式中具有特殊含义,所以我通过在前面加上反斜杠来逃避它们。我期待的结果只是字符串,123
但方括号仍然存在,我很想知道为什么!
~$ echo '[123]' | sed 's/[\[\]]//'
[123]
Run Code Online (Sandbox Code Playgroud)
Sap*_*gus 44
如果您仔细遵循手册,这很容易:字符类中的所有成员都失去了特殊含义(只有少数例外)。并且 ] 如果放在列表的第一个位置就失去了它的特殊意义。尝试:
$ echo '[123]' | sed 's/[][]//g'
123
$
Run Code Online (Sandbox Code Playgroud)
这说:
]
和 [
//
,g
.同样,无论何时包括在内,都]
必须在班级中排名第一。
Lad*_*ada 13
我不确定为什么这不起作用,但这样做:
echo '[123]' | sed 's/\(\[\|\]\)//g'
Run Code Online (Sandbox Code Playgroud)
或这个:
echo '[123]' | sed -r 's/(\[|\])//g'
Run Code Online (Sandbox Code Playgroud)
您也可以尝试不同的方法并匹配括号内的字符串(假设字符串可以轻松匹配并且不是由括号定义的):
echo '[123]' | egrep -o "[0-9]+"
Run Code Online (Sandbox Code Playgroud)
我在使用原始正则表达式时遇到了同样的问题,grep
所以我怀疑这不仅仅是一sed
件事。
奇怪的是,这些会产生不同的结果,但其中之一符合您的要求:
echo '[123]' | egrep -o '[^][]+'
123
echo '[123]' | egrep -o '[^[]]+'
3]
Run Code Online (Sandbox Code Playgroud)
将此应用于您的原始文件sed
(并添加/g
修饰符以删除两个括号):
echo '[123]' | sed 's/[][]//g'
123
Run Code Online (Sandbox Code Playgroud)
归档时间: |
|
查看次数: |
74872 次 |
最近记录: |