使用 sed 检索行的一部分

Zen*_*aro 7 regex sed macos

我有这样的 git svn 命令:

git svn log --limit=1 --oneline

它会像这样输出单行:

r12345 | <anything, as it is svn comment inputted by svn-user>

我正在尝试输入 sed 命令,以便获得12345唯一的命令,但是,我无法使其正常工作.. 有很多错误,当前错误是parenthesis not balanced

我的最后一条命令如下:

git svn log --limit=1 --oneline | sed -e 's/r\(0-9) |*/\1/'

我用谷歌搜索过,sed 文档不是很清楚......我对正则表达式不是很擅长,我最好的经验是使用git --grep具有良好文档的简化正则表达式。

如果重要的话,环境是 MacOSX 终端。

编辑:

sed -n 's/r\(0-9*\)/\1/ 有效,但返回空字符串。

gro*_*taj 14

这是一个无正则表达式的解决方案,因为

有些人在遇到问题时会想“我知道,我会使用正则表达式”。现在他们有两个问题。

(用一粒盐服用)

您可以使用cut两次:

git svn log --limit=1 --oneline | cut -d ' ' -f 1 | cut -c 2-
Run Code Online (Sandbox Code Playgroud)

第一个剪切 ( cut -d ' ' -f 1) 将空格设置为列分隔符并仅选择第一列,因此r12345. 第二个剪切 ( cut -c 2-) 选择位置 2 和后面 ( 2-)处的字符。

  • +1 表示无正则表达式的解决方案和解释。 (2认同)
  • 就其价值而言,regex 上的引用更适用于更复杂的情况。虽然您肯定不需要正则表达式来解决这个问题,但我鼓励 OP 更加熟悉它,因为它对于文本匹配和提取非常宝贵。老实说,我也认为它比您的解决方案更简单(当然,部分原因是我已经知道正则表达式)。 (2认同)

Nif*_*fle 7

你快到了

sed -e 's/r\([0-9]*\) .*/\1/'
Run Code Online (Sandbox Code Playgroud)

你必须告诉 sed 你想要\([0-9]*\)什么你不想要什么 / r&.*/