【发布时间】:2019-06-07 23:53:29
【问题描述】:
直截了当:这不仅仅是匹配数字。
在文档中有很多**,我需要用1和2替换它们。
示例输入
**Lorem ipsum dolor **sit amet, consectetur adipisicing elit. **
Ad velit delectus ** quidem itaque eum **accusamus reprehenderit**
illo culpa **** praesentium** ea fugit ****hic in vel officiis,
expedita sit **** et harum enim quaerat, **** ab corporis quo
atque perspiciatis. Minima odit obcaecati** ** reiciendis, sed
rerum ** labore. In fuga, ** aspernatur earum aliquid ** ******
**commodi delectus?
期望的输出
1Lorem ipsum dolor 2sit amet, consectetur adipisicing elit. 1
Ad velit delectus 2 quidem itaque eum 1accusamus reprehenderit2
illo culpa 12 praesentium1 ea fugit 21hic in vel officiis,
expedita sit 21 et harum enim quaerat, 21 ab corporis quo
atque perspiciatis. Minima odit obcaecati2 1 reiciendis, sed
rerum 2 labore. In fuga, 1 aspernatur earum aliquid 2 121
2commodi delectus?
我唯一想到的是做一个循环替换找到的第一个匹配项 (s/\*{2}/1/),然后替换第二个匹配项 (s/\*{2}/2/),冲洗并重复,但因为我仍然不知道如何把它翻译成 shellscript,我想知道这是否可以通过几个管道 sed 命令来实现。
【问题讨论】:
-
echo "** ** ** ** ** ** **" | sed -E 's/\*\* \*\*/1 2/g; s/\*\*/1/' -
当然这个例子很模糊,但你没有抓住重点。我已经提到我有一个文档,其中散落着许多星号
**。我需要更换那些。 -
使用
cat file | perl -0pe 's/\*\*(.*?)\*\*/1${1}2/gs' | sed 's/\*\*/1/' -
@Fabián - 让它不那么模糊,那么。 stackoverflow.com/help/how-to-ask
-
@Cyrus 添加了更好的样本输入和所需的输出
标签: linux bash sed terminal pipe