用sed替换方括号之间的字符串

罗尼·施马茨勒

我在文本文件中有一些如下所示的字符串:

[img:3gso40ßf]

我想将它们替换为正常的BBCode:

[img]

我如何用sed做到这一点?我尝试了这个,但是它什么也没做:

sed -i 's/^[img:.*]/[img]/g' file.txt
jub0bs

逃避那些方括号

方括号是元字符:它们在POSIX正则表达式中具有特殊含义如果你的意思[] 字面意思,你需要逃避你的正则表达式的字符:

$ sed -i .bak 's/\[img:.*\]/\[img\]/g' file.txt

使用[^]]*代替.*

因为*贪婪,.*会比你想要的捕获更多;参见吉德的评论要解决此问题,请使用[^]]*,它捕获直到(但不包括)第一个]遇到的字符序列

$ sed -i .bak 's/\[img:.[^]]\]/\[img\]/g' file.txt

您使用的sed -i语法不正确吗?

(感谢ja的评论。)

根据sed您所使用的风格,可能允许您在sed -i不指定任何<extension>参数的情况下使用,例如

$ sed -i 's/foo/bar/' file.txt

但是,在其他版本的中sed,例如Mac OS X附带的版本,sed -i需要强制性 <extension>参数,例如

$ sed -i .bak 's/foo/bar/' file.txt

如果您省略该扩展参数(.bak,此处),则会出现语法错误。您应该查看自己sed的手册页,以确定该参数是可选的还是强制性的。

匹配特定数量的字符

有没有办法判断sed冒号后面总是有8个随机字符?

就在这里。如果冒号和右方括号之间的字符数始终相同(此处为8),则可以使命令更具体:

$ sed -i .bak 's/\[img:[^]]\{8\}\]/\[img\]/g' file.txt

例子

# create some content in file.txt
$ printf "[img:3gso40ßf]\nfoo [img:4t5457th]\n" > file.txt

# inspect the file
$ cat file.txt
[img:3gso40ßf]
foo [img:4t5457th]

# carry out the substitutions
$ sed -i .bak 's/\[img:[^]]\{8\}\]/\[img\]/g' file.txt

# inspect the file again and make sure everything went smoothly
$ cat file.txt
[img]
foo [img]

# if you're happy, delete the backup that sed created
$ rm file.txt.bak

本文收集自互联网,转载请注明来源。

如有侵权,请联系[email protected] 删除。

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章

来自分类Dev

sed + 用键替换方括号中的字符串

来自分类Dev

用自定义html替换方括号之间的键/值字符串的函数

来自分类Dev

用空字符串替换Java中方括号之间的逗号和句号

来自分类Dev

Java:替换字符串(用方括号!)

来自分类Dev

用变量替换括号之间的字符串

来自分类Dev

替换字符串中的括号和方括号

来自分类Dev

如果有方括号,sed replace 将无法替换字符串

来自分类Dev

Javascript替换方括号之间的正则表达式字符串

来自分类Dev

用正则表达式替换字符串(方括号中除外)

来自分类Dev

Javascript Regex-替换所有出现的匹配字符串,但方括号之间的任何字符串除外

来自分类Dev

仅当在方括号之间时,才用逗号分割字符串

来自分类Dev

用 sed 替换包含括号的字符串,将包含日期的子字符串替换为括号

来自分类Dev

JavaScript-替换字符串中的方括号

来自分类Dev

用字符串中的方括号替换内容

来自分类Dev

sed:替换方括号之间的字母

来自分类Dev

根据方括号之间的单词分割字符串

来自分类Dev

编辑字符串以在方括号之间包含变量C ++

来自分类Dev

如何提取方括号之间的字符串

来自分类Dev

用方括号具体分割字符串

来自分类Dev

用sed脚本替换字符串

来自分类Dev

sed用引号替换字符串

来自分类Dev

用sed替换字符串

来自分类Dev

用sed替换多行字符串

来自分类Dev

sed用变量替换字符串?

来自分类Dev

用sed替换子字符串

来自分类Dev

用sed替换字符串

来自分类Dev

sed用引号替换字符串

来自分类Dev

sed用空格替换字符串

来自分类Dev

PostgreSQL子字符串在方括号之间获取字符串