Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/linux/25.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
linux sed使用换行符删除代码块_Linux_Sed - Fatal编程技术网

linux sed使用换行符删除代码块

linux sed使用换行符删除代码块,linux,sed,Linux,Sed,尝试从脚本中删除整个代码块: 我可以这样做直到换行和结束} sed '/var gfjfgjk/,/appendChild(s);\n}/d' 由于@Wiktor Stribiżew link,我如何在末尾包含换行符和}: for i in $(grep -rl gfjfgjk) ; do if grep -m1 gfjfgjk $i >/dev/null 2>&1 ; then echo $i ; sed -i -e '1,6d;7s/^}//' $i ; fi; do

尝试从脚本中删除整个代码块:

我可以这样做直到换行和结束}

sed '/var gfjfgjk/,/appendChild(s);\n}/d'

由于@Wiktor Stribiżew link,我如何在末尾包含换行符和}

for i in $(grep -rl gfjfgjk) ; do if grep -m1 gfjfgjk $i >/dev/null 2>&1 ; then echo $i ; sed -i -e '1,6d;7s/^}//' $i ; fi; done

唯一不同的是,我想确保gfjfgjk与文件的第一行匹配,以防它被注入脚本的其他地方,然后sed删除了前7行合法代码。

对于
sed
,请尝试以下操作:

sed '
:l      # define a label "l"
N       # read next line and append to the pattern space
$!b l   # goto "l" unless eof
s/var gfjfgjk.*appendChild(s);\n}//
        # remove the specified block including newlines
' file
它首先把所有的线都塞进模式空间,这样我们就可以处理了 一次多行(包括换行符)

可能的问题是文件是否包含模式
appendChild\n} 
在多行中,
sed
将由于
greedy
正则表达式的性质

或者,如果您选择
perl
,也可以说:

perl -0777 -pe 's/var gfjfgjk.*?appendChild\(s\);\n}//s' file
  • -0777
    选项告诉
    perl
    立即读取所有行
  • 正则表达式
    *?
    启用
    最短匹配
  • 末尾的
    s
    选项使点
    匹配换行符。否则
    perl
    regex中的点与换行符不匹配

。同样的问题仍然存在,它并没有删除最后一个关闭}示例,在我运行它之后,这里是js的第一行:
}/**
而不是
/**
噢,哇,没关系,我现在看到了,谢谢你似乎在我的主题上。您的问题需要包含一个简洁、可文本化的文本示例输入和预期输出,以便我们可以帮助您。没有链接,没有图片,只有文本来说明你的问题,我们可以测试潜在的解决方案。不要这样做,不管你想做什么,都有更好的方法。