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

Sed 为什么不区分大小写的搜索和替换在Solaris中不起作用?,sed,solaris,Sed,Solaris,我在Solarissed中尝试了以下命令,用于不区分大小写的查找和替换 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?i是一个

我在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

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

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

另一种替代方法是将搜索模式的每个无标签字符替换为其等效的
[sC]
,如
this:
替换为
[tT][hH][iI][sS]:
(之前的sed/awk on模式为泛型)


如果由于sed操作周围的“”shell解释,内容中出现了一些特殊的字符,那么只需添加第二个测试(以及纠正措施)

另一个替代方法是用其等效的
[sC]
like
this:
by
[tT][hH][iI][sS]:
(之前的sed/awk on模式为通用模式)


如果由于sed操作周围的“”shell解释,内容中出现了一些特殊字符,如\等,只需添加第二个测试(和纠正措施)

我经常这样做,以至于我编写了一个程序,在给定区分大小写(文字)的情况下生成不区分大小写的搜索字符串字符串。因此:
mkpattern alphabet
生成
[aA][lL][pP][hH][aA][bB][eE][tT]
。我经常这样做,以至于我编写了一个程序,在给定一个区分大小写(文字)的字符串时生成一个不区分大小写的搜索字符串。因此:
mkpattern alphabet
生成
[aA][lL][pP][hH][aA][bB eE][tT]
。我认为在这一行中,sed的/[Tt][Oo][Ff][Ii][Nn][Dd]/REPLACE/gi的文件名最后一个不应该出现。@Dinesh感谢您指出错误,已修复。我认为在这一行中,sed的/[Tt][Oo Ff][Ii][Nn Dd/替换/gi'最后一个文件名i不应该出现。@Dinesh感谢您指出该错误,已修复。由于某些原因,stackoverflow用户通常不认为shell脚本是一种编程语言。您最好在上一页询问此类问题。由于某些原因,stackoverflow通常不认为shell脚本是一种编程语言流量用户。你最好在网上问这样的问题