的第一線從bash腳本,我試圖從像文件刪除模式如下:刪除多行的模式開始在文件中只
<%
delete this tag
%><? keep this tag ?>
<% keep this tag %>
但是,只有當該標籤是在開頭的文件,所以下面將觸及:
text to keep
<%
don't delete me now
%>
我試圖從其他問題的答案拼湊的東西,但一直沒能拿出一個命令,將這樣工作。
這可能與sed
?有沒有更好的工具可以使用?
的第一線從bash腳本,我試圖從像文件刪除模式如下:刪除多行的模式開始在文件中只
<%
delete this tag
%><? keep this tag ?>
<% keep this tag %>
但是,只有當該標籤是在開頭的文件,所以下面將觸及:
text to keep
<%
don't delete me now
%>
我試圖從其他問題的答案拼湊的東西,但一直沒能拿出一個命令,將這樣工作。
這可能與sed
?有沒有更好的工具可以使用?
所以發佈後,我想出瞭如何在sed
使用下面的命令:
sed -e
'/<%/ # When we match the start pattern, '<%', execute the following command block
{
1!b; # If we're not on the first line when we match the start pattern, exit
:x; # Define label 'x'
$!N; # If not at the end of file, capture the current line
/%>/!bx; # If we're not at the end pattern, '%>', go to label 'x'
s/<%.*%>// # After reaching the end pattern, replace all matching text in the captured lines with nothing
}'
-i "file"
你應該使用sed
,如:
sed '0,/REGEXP/' your_input_file
其中REGEXP是你想要的正則表達式。
如果你想給perl
機會那麼這應該工作:
破碎:
-0777
:啜食模式,以適應所有包括換行符^\s*
文件文本:匹配開始,後跟0或更多空格<%.*?%>
:彰顯標籤(懶惰)要重新更改保存到文件:
perl -i -0777 -pe 's/^\s*<%.*?%>//s' file
謝謝!這確實有效,但我設法使用'sed'找到解決方案。我只是爲了與同一腳本中的其他命令保持一致而採取了這種做法。 – PseudoPsyche
用awk:
$ awk '
NR==1 && /</ { d=1 } # if < on the first line raise the del flag
d==1 { # if del flag up
if(/>/) # lower del flag at >
d=0
sub(/<?[^>]+>?/,"") # replace from <to> with nuthin
}
/./ # print nonempty lines
' file
<? keep this tag ?>
<% keep this tag %>
處理的其他文件:
text to keep
<%
don't delete me now
%>
你能告訴我們你的文件的一個實際的例子,以獲得更多的啓示:
sed -e '/<%/{1!b;:x;$!N;/%>/!bx;s/<%.*%>//}' -i "file"
命令的解釋? – Inian
請添加您嘗試的任何命令......它會顯示您的努力...是perl好嗎? – Sundeep