在某种模式之前添加文本时使用sed和忽略大小写

sed -i '/first/i This line to be added' 

在这种情况下,如何在searchpattern = first的时候忽略case

Solutions Collecting From Web of "在某种模式之前添加文本时使用sed和忽略大小写"

您可以使用以下内容:

 sed 's/[Ff][Ii][Rr][Ss][Tt]/last/g' file 

否则,你有/I和N /i标志:

 sed 's/first/last/Ig' file 

从man sed :

一世

一世

用于正则表达式匹配的I修饰符是一个GNU扩展,它以不区分大小写的方式使sed匹配正则表达式。

测试

 $ cat file first FiRst FIRST fir3st $ sed 's/[Ff][Ii][Rr][Ss][Tt]/last/g' file last last last fir3st $ sed 's/first/last/Ig' file last last last fir3st 

GNU sed

 sed '/first/Ii This line to be added' file 

如果你想保存一些输入,请尝试awk。 我不认为sed有这个选择

  awk -v IGNORECASE="1" '/first/{your logic}' file 

你可以试试

 sed 's/first/somethingelse/gI' 

对于不了解IGNORECASE特殊变量的awk版本,可以使用如下所示:

 awk 'toupper($0) ~ /PATTERN/ { print "string to insert" } 1' file 

将每行转换为大写,然后测试它是否与模式匹配,如果是,则打印字符串。 1是最短的真实条件,所以awk默认的是{ print }

要使用一个变量,你可以这样做:

 awk -v var="$foo" 'BEGIN { pattern = toupper(foo) } toupper($0) ~ pattern { print "string to insert" } 1' file 

这会传递shell变量$foo并在文件处理之前将其转换为大写。

bash稍微短一点就是使用-v pattern="${foo^^}"并跳过BEGIN块。