问题
How do I match a case insensitive regex and delete it at the same time
I read that to get case insensitive matches, use the flag "i"
sed -e "/pattern/replace/i" filepath
and to delete use d
sed -e "/pattern/d" filepath
I've also read that I could combine multiple flags like 2iw
I'd like to know if sed could combine both i and d I've tried the following but it didn't work
sed -e "/pattern/replace/id" filepath > newfilepath
回答1:
For case-insensitive use /I
instead of /i
.
sed -e "/pattern/Id" filepath
回答2:
you can use (g)awk as well.
# print case insensitive
awk 'BEGIN{IGNORECASE=1}/pattern/{print}' file
# replace with case insensitive
awk 'BEGIN{IGNORECASE=1}/pattern/{gsub(/pattern/,"replacement")}1' file
OR just with the shell(bash)
#!/bin/bash
shopt -s nocasematch
while read -r line
do
case "$line" in
*pattern* ) echo $line;
esac
done <"file"
来源:https://stackoverflow.com/questions/2157288/using-sed-to-delete-a-case-insensitive-matched-line