<Property name="wt.99999" overridable="true"
default="ext.listner.services.ListnerService/ext.listner.services.ListnerService"/>
我想使用shell脚本删除空间。
我写这个代码。
filename2=CECWT.xconf
c=wt.99999
c1=ext.listner.services.ListnerService
grep -w "$c|$c1" $filename2 > output.txt
cat output.txt | trim
我想要输出:
<Property name="wt.99999" overridable="true" default="ext.listner.services.ListnerService/ext.listner.services.ListnerService"/>
您可以使用以下GNU sed命令:
sed '/overridable=/N; N; s/ns*/ /g' your_file
它查找包含字符串"overridable="的任何一行,然后读入接下来的2行(N; N
(,因为在您的示例中你想要的那个。然后删除换行符和任何尾随空格ns*
,将它们替换为空格,生成一条连接线。(注该命令仅适用于两者之间只有一个空行的情况您想要加入的行!(
如果您想就地进行替换(即覆盖在您的_file中,您可以添加-i
标志:
sed -i '/overridable=.*/N; N; s/ns*/ /g' your_file
本页https://www.grymoire.com/Unix/Sed.html如果你想要学习。
正在尝试该命令
当我在一个名为"your_file"的文件上测试命令时,该文件包含以下内容:
<Property name="wt.99999" overridable="true"
default="ext.listner.services.ListnerService/ext.listner.services.ListnerService"/>
我得到:
<Property name="wt.99999" overridable="true" default="ext.listner.services.ListnerService/ext.listner.services.ListnerService"/>
grep
本身似乎不是一个很好的工具。如果您的输入是正确的XML,那么使用真正的XML工具重新格式化它可能是一种方法。但如果你只需要快速清理一些东西,可以试试这个简单的Awk脚本:
awk '/<Property name="wt.99999"/ { printf "%s", $0; isprop=1; next }
/^[ t]*$/ && isprop { next; }
{ isprop=0 } 1' CECWT.xconf >output.txt
末尾的1
打印带有换行符和all的输入行。我们对匹配第一个正则表达式的行进行特殊处理,以在不使用换行符的情况下打印该行。然后,我们添加一个状态变量,以跳过任何只有空白(或根本没有空白(的行,直到找到一行与任何正则表达式都不匹配。
这仍然会在属性行的末尾留下空白,在下一行的开头留下空白;修剪会使脚本稍微复杂一些,但不会太复杂。
awk '/<Property name="wt.99999"/ { printf "%s", $0; isprop=1; next }
/^[ t]*$/ && isprop { next; }
isprop { sub(/^[ t]*/, " "); isprop=0 } 1' CECWT.xconf >output.txt