有些人可以详细解释一个sed命令

时间:2015-08-13 02:17:44

标签: sed

我没有得到命令sed 's/^.*\(.\{4\}\)$/\1/'它做了什么。如果有人可以为每个角色解释我会很好,我可以很好地理解它。我现在只使用sed并且现在只学习它。

1 个答案:

答案 0 :(得分:1)

你有两件事情在进行,理解sed并理解传递给sed替换命令的正则表达式。

让我们从over all命令开始:

sed 's/^.*\(.\{4\}\)$/\1/'
 ^   ^      ^          ^
 |   |      |          |- what you want to replace found text with
 |   |      |
 |   |      |- what you're looking for
 |   |    
 |   |- tell sed you want to substitute the text we find
 |      between the first two '/' with the contents between
 |      the last two '/'
 |
 |- call the sed application

接下来是理解正则表达式。 https://regex101.com/是一个很好的资源。首先,让我们看一下正则表达式:

^.*\(.\{4\}\)$

你通过shell发送这个,所以有一些shell转发。让我们删除shell转义以查看真正的正则表达式:

^.*(.{4})$

现在这一点有点清楚了。这个正则表达式:

  1. 匹配行的开头:^
  2. 后跟零个或多个字符:.*
  3. 并捕获该行的最后4个字符:(.{4})$
    • 括号创建捕获组
    • .捕获任何角色
    • {4}四次
    • $锚定在行尾
  4. 最后,我们有sed命令的/\1/部分。这告诉sed将^.*(.{4})$中找到的内容替换为(.{4})$创建的捕获组中找到的所有内容。

    所以基本上,这个命令用一行中找到的最后四个字符替换文件中的每一行。