例如,在一个大文件中我可能有:
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
最简单的情况是,这将更改为/16
across [[[/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
/16
s
http://16.1.2.3/
1/16
blah/16.12e-20
/1654321
[[[/16]]]
答案4
如果您想进行完全匹配,除了其他提供的解决方案之外,以下命令也可能会帮助您;
sed 's#/16#[[[/16]]]#g' yourfilename
这解释如下:
sed
是一个实用程序,设计用于在输入流(例如文件或管道)中进行文本修改。- 该
s
命令用于替换或替换文本。#
用作s
命令中的分隔符以避免与/
搜索模式中的冲突。 /16
代表您正在寻找的特定字符串,并且[[[/16]]]
是您想要替换它的字符串。g
末尾的flag表示进行全局替换。