(正则表达式,sed)如何在擦除单词后附加已擦除的单词
(regex,sed) How to append erased word after erasing word
我想改变什么
.:/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:.:/sbin:/bin
我想做什么
/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin:.
我想拾取所有点 ("."),并想附加到行尾。
如果行中没有点(“.”),则只打印该行。
我可以擦掉有点的行中的点。但在这种情况下,我无法将点附加到行尾 (/\.:/
)。
$ echo /usr/local:.:/bin | sed -r -e "/\.:/s/(\.:)//g"
如何在擦除单词后追加已擦除的单词,仅使用 sed
命令?
您可以将另一个表达式附加到 sed:-e "s/:?$/:./"
.
这意味着:用点替换行尾(以及任何最终的尾随冒号)。
您可以使用
#!/bin/bash
s='.:/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:.:/sbin:/bin'
sed -r -e 's/(.+)\.:/.:/' -e 's/(.)\.://g' -e 's/\.:(.+)/:./' <<< "$s"
# => /usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin:.
这里,
s/(.+)\.:/.:/
在您的字符串中的任意位置找到一个 .:
子字符串,并将找到的 .:
移动到字符串的开头
s/(.)\.://g
删除字符串中的所有非初始 .:
字符组合,然后
s/^\.:(.+)/:./
删除字符串开头的 .:
并在结尾粘贴 :.
。
我想改变什么
.:/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:.:/sbin:/bin
我想做什么
/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin:.
我想拾取所有点 ("."),并想附加到行尾。
如果行中没有点(“.”),则只打印该行。
我可以擦掉有点的行中的点。但在这种情况下,我无法将点附加到行尾 (/\.:/
)。
$ echo /usr/local:.:/bin | sed -r -e "/\.:/s/(\.:)//g"
如何在擦除单词后追加已擦除的单词,仅使用 sed
命令?
您可以将另一个表达式附加到 sed:-e "s/:?$/:./"
.
这意味着:用点替换行尾(以及任何最终的尾随冒号)。
您可以使用
#!/bin/bash
s='.:/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:.:/sbin:/bin'
sed -r -e 's/(.+)\.:/.:/' -e 's/(.)\.://g' -e 's/\.:(.+)/:./' <<< "$s"
# => /usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin:.
这里,
s/(.+)\.:/.:/
在您的字符串中的任意位置找到一个.:
子字符串,并将找到的.:
移动到字符串的开头s/(.)\.://g
删除字符串中的所有非初始.:
字符组合,然后s/^\.:(.+)/:./
删除字符串开头的.:
并在结尾粘贴:.
。