我在Solaris sed
中尝试了以下命令,用于不区分大小写的查找和替换
sed s/TOFIND/REPLACE/gi fileName
sed s/TOFIND/REPLACE/gi fileName
/usr/xpg4/bin/sed s/TOFIND/REPLACE/gi fileName
/usr/xpg4/bin/sed s/TOFIND/REPLACE/gi fileName
但没有一种方法可行。我得到了所有的命令乱码错误。 Solaris sed
中是否不支持不区分大小写的搜索?
答案 0 :(得分:3)
i
是非标准的GNU sed扩展。
如果已安装,您可以使用GNU sed
。它可能位于/usr/sfw/bin/gsed
或/usr/gnu/bin/sed
,具体取决于版本。
否则,标准方式是
sed 's/[Tt][Oo][Ff][Ii][Nn][Dd]/REPLACE/g' fileName
您可以通过以下方式自动化流程:
pattern="tofind"
sed "s/$(printf "%s" "$pattern"|sed 's/./\[\U&\L&\]/g')/REPLACE/g" fileName
答案 1 :(得分:1)
另一个替代方法是用[sC]
替换搜索模式的每个aphabetic char,如this:
[tT][hH][iI][sS]:
(前一个sed / awk on pattern是通用的)
printf "%s\n" "SearchPattern" | sed 's/[aA]/[aA]/g;s[bB]/[bB]/g; ..... ;s/[zZ]/[zZ]/g' | read -r CaseSearchPattern
/usr/xpg4/bin/sed "s/${CaseSearchPattern}/REPLACE/g" fileName
最后添加第二个测试(并采取纠正措施),如果由于“sed动作中的shell解释”而在内容中出现了一些特殊的字符