Regex 从一对词中脱口而出
可以使用如下命令将单词“before”替换为单词“before”,其中“before”出现在单词“begin”和“end”之间: sed'/begin/,/end/{s/before/after/g}'Regex 从一对词中脱口而出,regex,sed,Regex,Sed,可以使用如下命令将单词“before”替换为单词“before”,其中“before”出现在单词“begin”和“end”之间: sed'/begin/,/end/{s/before/after/g}' 我正在寻找一种将“before”替换为“after”的方法,前提是它们不会出现在一对“begin”和“end”中。该作业的正确工具是awk而不是sed。要执行与当前的sed相同的操作: echo 'before begin before end before' | awk ' BEGIN
我正在寻找一种将“before”替换为“after”的方法,前提是它们不会出现在一对“begin”和“end”中。该作业的正确工具是
awk
而不是sed
。要执行与当前的sed
相同的操作:
echo 'before
begin
before
end
before' | awk '
BEGIN {st=0;}
/begin/ {st=1;}
/end/ {st=0;}
{
if (st==1) {
gsub("before","after");
print;
} else {
print
}
}'
将为您提供:
before
begin
after
end
before
after
begin
before
end
after
如果将控制gsub
的If
语句的意义颠倒过来,您将得到想要的:
echo 'before
begin
before
end
before' | awk '
BEGIN {st=0;}
/begin/ {st=1;}
/end/ {st=0;}
{
if (st==0) {
gsub("before","after");
print;
} else {
print
}
}'
将为您提供:
before
begin
after
end
before
after
begin
before
end
after
该作业的正确工具是
awk
,而不是sed
。要执行与当前的sed
相同的操作:
echo 'before
begin
before
end
before' | awk '
BEGIN {st=0;}
/begin/ {st=1;}
/end/ {st=0;}
{
if (st==1) {
gsub("before","after");
print;
} else {
print
}
}'
将为您提供:
before
begin
after
end
before
after
begin
before
end
after
如果将控制gsub
的If
语句的意义颠倒过来,您将得到想要的:
echo 'before
begin
before
end
before' | awk '
BEGIN {st=0;}
/begin/ {st=1;}
/end/ {st=0;}
{
if (st==0) {
gsub("before","after");
print;
} else {
print
}
}'
将为您提供:
before
begin
after
end
before
after
begin
before
end
after
反转几乎是微不足道的:
sed '/begin/,/end/ !s/before/after/g'
请注意,给定以下输入
begin before end
before
end
before
begin
before end
before
end
before
原始脚本将提供以下输出:
begin after end
after
end
before
begin
after end
before
end
before
请注意,与“开始”在同一行上的“结束”不会关闭替换。(如果在“begin”之后使用“end before”,则“before”仍然被“after”替换)。倒装法几乎不重要:
sed '/begin/,/end/ !s/before/after/g'
请注意,给定以下输入
begin before end
before
end
before
begin
before end
before
end
before
原始脚本将提供以下输出:
begin after end
after
end
before
begin
after end
before
end
before
请注意,与“开始”在同一行上的“结束”不会关闭替换。(如果在“开始”之后使用“结束之前”,则“之前”仍然替换为“之后”)-1,因为sed版本完全不重要,并且比awk-1更合适,因为sed版本完全不重要,比awk更合适的是,在地址范围的开头有一个超级字“s”。在地址范围的开头有一个超级字“s”。