我有一个包含很多字符串的文件。例如:
Bergson
BErgson Bergso
\a{Henri Bergson}
Henri BERgson bergson
我想在Bergson
中封装单词\a{...}
(带有不敏感的大小写),但前提是该单词不在\a{...}
命令中。
所以结果必须是
\a{Bergson}
\a{BErgson} Bergso
\a{Henri Bergson}
Henri \a{BERgson} \a{bergson}
我正在尝试使用sed
,但这对我来说太复杂了,或者它可能不是正确的工具。
你知道我怎么能这样做吗?
答案 0 :(得分:1)
使用gnu sed:
$ sed '/\\a{.*bergson.*}/I! s/bergson/\\a{&}/gI'
\a{Bergson}
\a{BErgson} Bergso
\a{Henri Bergson}
Henri \a{BERgson} \a{bergson}
替代方案:
sed '/\\a{.*bergson.*}/In; s/bergson/\\a{&}/gI' file1
答案 1 :(得分:1)
sed -r '
s/(\\a\{[^}]*ber)(gson[^}]*\})/\1#\2/Ig;
s/bergson/\\a{&}/gI;
s/(ber)#(gson)/\1\2/gI' input.txt
<强>解释强>
s/(\\a\{[^}]*ber)(gson[^}]*\})/\1#\2/Ig;
- 替换不应触及\a{Henri Berg#son}
的字符串(将哈希符号插入“Bergson”字样)。
[^}]*
和[^}]*
。 s/bergson/\\a{&}/gI;
- 以标准方式替换所有需要的“bergsons”。
s/(ber)#(gson)/\1\2/gI
- 从#
中移除Berg#son
,将其还原为原始格式。
输入(测试很复杂)
Bergson
BErgson Bergso
\a{Henri Bergson} bergson \a{Bergson} another words
Henri BERgson bergson
<强>输出强>
\a{Bergson}
\a{BErgson} Bergso
\a{Henri Bergson} \a{bergson} \a{Bergson} another words
Henri \a{BERgson} \a{bergson}