使用 sed 替换一行中另一个字符之前的字符

使用 sed 替换一行中另一个字符之前的字符

我尝试使用 sed 或其他东西来替换 /opt/tin/toss 中的一些行,使其成为 *

例如

37 7 * * * /opt/tin/toss
43 7 * * * /opt/tin/te1
58 7 * * * /opt/tin/test2

输出:

37 * * * * /opt/tin/toss
43 7 * * * /opt/tin/te1
58 7 * * * /opt/tin/test2

通常情况下,7 是随机生成的,可以是 2、4 或 8,从 0 到 24。

答案1

sed '/\/opt\/tin\/toss/ s/^\([^ ]* \+\)[^ ]*\( .*\)$/\1*\2/'

你可以将其读作,

在有的地方/opt/tin/toss,替换匹配的模式

^行首,后跟

\([^ ]* \+\)

第一组任意数量\([^ ]*字符,直到一个或多个空格\+,然后结束组\)

[^ ]*

接下来是[^ ]*任何东西,直到空间

\( .*\)

接下来是第二组\( .*\)$匹配空格,然后是任何内容,直到结束

/\1*\2/

第一组,然后*是第二组。

答案2

sed 的一个例子

sed  's/^\([0-9]*\) [0-9]*  *\(\*  *\* *\*  *\/opt\/tin\/toss.*\)$/\1 * \2/'

\([0-9]*\)将匹配第一个数字并将值保留在\1

\(\* *\* *\* *\/opt\/tin\/toss.*\)将匹配命令行上的最后 3 颗星,并将该值保留在\1

相关内容