Warning: file_get_contents(/data/phpspider/zhask/data//catemap/7/python-2.7/5.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Bash 替换/删除字符串中的方括号_Bash_Shell_Unix_Sed_Scripting - Fatal编程技术网

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来思考的?