Bash-使用变量从文件中删除上下两行
我必须构建一个bash脚本,从文件中删除上下两行 脚本向用户询问一个单词,在文件中搜索该单词,并删除4行上行、9行下行和包含该单词的行 以下是有效的命令:Bash-使用变量从文件中删除上下两行,bash,sed,vi,Bash,Sed,Vi,我必须构建一个bash脚本,从文件中删除上下两行 脚本向用户询问一个单词,在文件中搜索该单词,并删除4行上行、9行下行和包含该单词的行 以下是有效的命令: vi -e -c 'g/word/.-4,-d' -c 'wq' fileName sed -i '/word/,+9d' fileName 问题是,我想让用户输入一个单词,我将使用它作为变量来完成这一切 下面的代码不起作用 #!/bin/bash read -p "Insert the word:" word v
vi -e -c 'g/word/.-4,-d' -c 'wq' fileName
sed -i '/word/,+9d' fileName
问题是,我想让用户输入一个单词,我将使用它作为变量来完成这一切
下面的代码不起作用
#!/bin/bash
read -p "Insert the word:" word
vi -e -c 'g/$word/.-4,-d' -c 'wq' fileName
sed -i '/$word/,+9d' fileName
我应该怎么做才能解决这个问题呢?类似的方法可以解决这个问题,假设搜索词在文件中只出现一次
$ awk -v b=4 -v a=9 -v word="$word" 'NR==FNR{if($0~word) n=NR; next}
FNR<n-b || FNR>n+a' file{,}
$awk-vb=4-va=9-vword=“$word”'NR==FNR{if($0~word)n=NR;next}
FNRn+a'文件{,}
双击文件,首先查找匹配的行号,第二轮根据前后上下文集打印行
如果找不到搜索词,也不处理。如果要打印所有内容,请添加
!n |
到最后一个条件您可以使用vi
或ed
一次性完成,无需使用sed
。单引号内的变量不会被插值,因此需要双引号。有关详细信息,请参阅
vi-e-c'g/'“$word”/-4,+9d'-c'wq'文件名
printf'/%s/\n-4,+9d\nwq\n'$word“| ed-s文件名>/dev/null
我知道的ed
不足以阻止打印与给定单词匹配的行,因此使用/dev/null
是否回答了您的问题?