sed -i '/first/i This line to be added'
在这种情况下,如何在搜索模式时忽略大小写 =first
您可以使用以下内容:
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
sed '/first/Ii This line to be added' file
你可以试试
sed 's/first/somethingelse/gI'
如果您想节省一些输入,请尝试 awk。我认为 sed 没有那个选项
awk -v IGNORECASE="1" '/first/{your logic}' file
使用以下内容,\b 表示单词边界
sed 's/\bfirst\b/This line to be added/Ig' file
对于不理解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
块。