Bash 替换/删除字符串中的方括号
我的文件中有以下文本:Bash 替换/删除字符串中的方括号,bash,shell,unix,sed,scripting,Bash,Shell,Unix,Sed,Scripting,我的文件中有以下文本: Names of students [Name:Anna] [Name:Bob] [Name:Carla] [Name:Daniel] [ThisShouldNotBeBeRemoved] End of all names Blablabla 我想删除文本文件中出现[Name:xxx]格式字符串的所有行,xxx是任何长度的字符串,由任何字符组成 我尝试了以下方法,但没有成功: $ sed '/\[Name:*\]/d' file > new-file 我还有别的
Names of students
[Name:Anna]
[Name:Bob]
[Name:Carla]
[Name:Daniel]
[ThisShouldNotBeBeRemoved]
End of all names
Blablabla
我想删除文本文件中出现[Name:xxx]格式字符串的所有行,xxx是任何长度的字符串,由任何字符组成
我尝试了以下方法,但没有成功:
$ sed '/\[Name:*\]/d' file > new-file
我还有别的办法吗?你需要使用
*
而不仅仅是*
sed '/\[Name:[[:alpha:]]+\]/d' file
Names of students
[ThisShouldNotBeBeRemoved]
End of all names
Blablabla
sed '/\[Name:.*\]/d' file > new-file
*
在这种特殊情况下,它本身是没有意义的。在表示“零次或多次匹配任何字符”之前添加
,我认为这是您想要做的
如果您想对原始文件进行就地编辑而不重新定向到新文件,请执行以下操作:
Linux:
sed -i '/\[Name:.*\]/d' file
马科斯:
sed -i '' '/\[Name:.*\]/d' file
*注意-这将覆盖原始文件。您需要使用
*
而不仅仅是*
sed '/\[Name:.*\]/d' file > new-file
*
在这种特殊情况下,它本身是没有意义的。在表示“零次或多次匹配任何字符”之前添加
,我认为这是您想要做的
如果您想对原始文件进行就地编辑而不重新定向到新文件,请执行以下操作:
Linux:
sed -i '/\[Name:.*\]/d' file
马科斯:
sed -i '' '/\[Name:.*\]/d' file
*注意-这将覆盖原始文件。您遗漏了一些内容
sed '/\[Name:.*\]/d' file > new-file
这将删除匹配的行
.* This matches any character zero or more than once.
你错过了什么
sed '/\[Name:.*\]/d' file > new-file
这将删除匹配的行
.* This matches any character zero or more than once.
我会使用
grep
和-v
-v、 --反向匹配
反转匹配的意义,以选择不匹配的线。(-v由POSIX指定。)
我会使用
grep
和-v
-v、 --反向匹配
反转匹配的意义,以选择不匹配的线。(-v由POSIX指定。)
或者,如果不想创建新文件,请尝试此操作
sed-i'/[Name:.*]/d'文件或者如果不想创建新文件,请尝试此操作
sed-i'/[Name:.*]/d'文件您不需要能够使用正则表达式的sed为此,可以使用POSIX-ly
sed
您不需要能够使用正则表达式的sed为此,可以使用单引号,除非您需要shell解释grep-v'\[Name:'
@schorsch312:因为我们不需要任何regexp元字符,grep-vF'[Name:'
会更简单。不需要转义括号。除非您需要shell解释,否则请使用单引号…grep-v'\[Name:'
@schch312:因为我们不需要任何regexp元字符,grep-vF'[Name:'
会更简单。无需跳出括号。您只是错过了
,它应该是sed'/\[Name:.\]/d'
…也许您是用glob而不是regex来思考的?您只是错过了
,它应该是sed'/\[Name:.\]/d'
。也许您是用glob而不是regex来思考的?