尝试理解并分解这个命令。
echo -e '1234\n4567' | sed 's/^\(..\)\(..\)$/\1:\2/'
答案1
echo -e '1234\n4567'
echo
将参数写入标准输出。-e
启用解释反斜杠转义。'1234\n4567'
要写入的序列。这里用单引号引用。这\n
是一个反斜杠转义产生一个新行。如果没有这个-e
选项echo
,就会产生一个字面量\n
.看man echo
。
|
|
管道标准输出从左,echo
, 到标准输入对于右侧的命令,sed
.
sed 's/^\(..\)\(..\)$/\1:\2/'
sed
s(流) ed(itor)'s/^\(..\)\(..\)$/\1:\2/'
→s/ A / B /
s
用 B 代替 AA:
^\(..\)\(..\)$
^
行首\(
开始捕获组 1.(
将是一个字面量(
。.
匹配任何字符并将其添加到捕获组 1。.
匹配任何字符并将其添加到捕获组 1。
\)
结束捕获组 1。\(
启动捕获组 2。.
匹配任何字符并将其添加到捕获组 2。.
匹配任何字符并将其添加到捕获组 2。
\)
结束捕获组 2。
$
匹配行尾。
- 乙:
\1:\2
\1
打印捕获组 1。:
打印文字:
\2
打印捕获组 2。
换句话说:
写:
1234
4567
标准输出并将其通过管道传输到sed
.
在sed
;从标准输入读取并匹配四个字符的行。用冒号分隔前两个和后两个并打印结果:
12:34
45:67