为什么不区分大小写的搜索和替换在Solaris sed中不起作用?

时间:2014-01-06 07:01:31

标签: sed solaris

我在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中是否不支持不区分大小写的搜索?

2 个答案:

答案 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解释”而在内容中出现了一些特殊的字符