用字符包裹特定字符串

用字符包裹特定字符串

例如,在一个大文件中我可能有:

This is a /16 text file

我想将其更改为以下内容:

This is a [[[/16]]]] text file

想要匹配确切的字符串/16

有没有办法做到这一点?

答案1

假设您在名为的文件中包含此内容text.txt

This is a /16 text file
This is another /8 text file
This is a /32 text file

我发现这个命令可以帮助你:

sed -i 's/\/\([0-9]\+\)/[[[\/\1]]]/g' text.txt

答案2

最简单的情况是,这将更改为/16across [[[/16]]]]file而将原始内容保留为file.bak

sed -i'.bak' 's!/16![[[&]]]]!g' file

某些平台可能支持使用-i不带后缀(此处'.bak')或带空后缀(即'')进行就地编辑但不创建备份。完全删除-i要写入的部分标准输出而不是编辑源文件。

例如,

echo 'This is a /16 text file' | sed 's!/16![[[&]]]]!g'

This is a [[[/16]]]] text file

根据您的指示,它不考虑单词边界:80/160将被替换为80[[[/16]]]]0。代码也不会考虑类似但不同的实例,例如/8/32。请编辑你的问题是否必须考虑此类细节。

答案3

perl -pi -e 's|(?<!\S)/\d+(?!\S)|[[[$&]]]|g' your-file

/将包含由后跟一个或多个 ( +) 十进制数字 ( )组成的字符串\d,这些数字 ( ) 前面(?<!...)和 ( (?!...)) 后面都没有非空白字符 ( \S) [[[...]]]

替换\d+16匹配文字16而不是任何十进制数字序列。您可能需要根据您不希望(或者如果您替换为)在该 周围查找的内容来调整(?<!...)和环视运算符的内容。或者,如果您希望替换它们,即使它们出现在or or or or内部,也可以将它们完全删除。(?!...)!=/16/16shttp://16.1.2.3/1/16blah/16.12e-20/1654321[[[/16]]]

答案4

如果您想进行完全匹配,除了其他提供的解决方案之外,以下命令也可能会帮助您;

 sed 's#/16#[[[/16]]]#g' yourfilename

解释如下:

  • sed是一个实用程序,设计用于在输入流(例如文件或管道)中进行文本修改。
  • s命令用于替换或替换文本。#用作s命令中的分隔符以避免与/搜索模式中的冲突。
  • /16代表您正在寻找的特定字符串,并且[[[/16]]]是您想要替换它的字符串。
  • g末尾的flag表示进行全局替换。

相关内容