Tux*_*ife 1 python regex perl sed awk
通过除以“·”和“”字符,我想把这个:
Hel·lo my name is E·ric
Run Code Online (Sandbox Code Playgroud)
对此:
Hel·lo my name is E·ric
Hel·lo my name is E·
Hel·lo my name is
Hel·lo my name
Hel·lo my
Hel·lo
Hel·
Run Code Online (Sandbox Code Playgroud)
下面的代码几乎可以做到,但我不太确定需要调整什么才能保留音节点。
sentence="Hel·lo my name is E·ric"
echo $sentence | awk -F'[· ]' -v OFS=" " '{print;for (i=NF;i>1;i--){$i="";print;NF--} }'
Run Code Online (Sandbox Code Playgroud)
$ echo $sentence | awk -F'[· ]' '{out=$0;print;for (i=NF;i>1;i--){out=gensub(/([· ])[^· ]*[· ]?$/, "\\1", "g", out); print out }}'
Hel·lo my name is E·ric
Hel·lo my name is E·
Hel·lo my name is
Hel·lo my name
Hel·lo my
Hel·lo
Hel·
Run Code Online (Sandbox Code Playgroud)
对于那些喜欢他们的代码分布在多行上的人:
sentence="Hel·lo my name is E·ric"
echo $sentence | awk -F'[· ]' '{
out=$0
print
for (i=NF;i>1;i--){
out=gensub(/([· ])[^· ]*[· ]?$/, "\\1", "g", out)
print out
}
}'
Run Code Online (Sandbox Code Playgroud)
-F'[· ]'
告诉 awk 在任何出现的·
空格或空格处分隔字段。
{
标记此行的处理组的开始。
out=$0
告诉 awk 将当前行(在 awk 中称为$0
)保存在变量 中out
。
print
打印当前行。
for (i=NF;i>1;i--){
开始一个循环,该循环对输入行中的字段数进行倒计时。对于循环的每次执行:
out=gensub(/([· ])[^· ]*[· ]?$/, "\\1", "g", out)
从行尾删除一个字段,包括任何前面或后面的字段分隔符,并将结果文本保存在变量 中out
。
print out
打印变量的内容out
。
}
标记 for 循环的结束。
}
标记此行的处理组结束