joh*_*doe 0 bash text-processing
如何在第 n 个分隔符之后打印字符串的其余部分(不仅仅是没有分隔符的列)?
我有一个包含一堆注册表项的文本文件,类似于:
hku\test\user\software\microsoft\windows\currentversion\runonce\delete cached update binary
Run Code Online (Sandbox Code Playgroud)
我想在第三个\字符之后打印所有内容。所以我正在寻找输出
software\microsoft\windows\currentversion\runonce\delete cached update binary
Run Code Online (Sandbox Code Playgroud)
我知道如何用 打印出特定的列awk,但是有没有什么简单的方法可以bash用来指定一个分隔符来分割字符串,而不是使用分隔符来打印列?
管道通过 cut -d \\ -f 4-。
echo 'hku\test\user\software\microsoft\windows\currentversion\runonce\delete cached update binary' | cut -d \\ -f 4-
Run Code Online (Sandbox Code Playgroud)
产量:
software\microsoft\windows\currentversion\runonce\delete cached update binary
Run Code Online (Sandbox Code Playgroud)
注意 double \\,因为 single\是转义字符。
与sed:
sed -E 's/^([^\]*[\]){3}//' infile
Run Code Online (Sandbox Code Playgroud)
或相同awk:
awk '{ sub(/([^\\]*[\\]){3}/, "") }1' infile
Run Code Online (Sandbox Code Playgroud)
比赛重复(regex)3次;[^\]*[\]匹配零个或多个任意字符,但不匹配反斜杠(特殊情况下不加上换行符)后跟反斜杠字符。
和外壳(POSIX sh/bash/Korn/zsh)解决方案:
$ str='hku\test\user\software\microsoft\windows\currentversion\runonce\delete cached update binary'
$ for i in $(seq 3); do str="${str#*\\}"; done
$ printf '%s\n' "$str"
Run Code Online (Sandbox Code Playgroud)
该${parameter#word}语法是参数扩展,这条从它的参数最短的前缀。
| 归档时间: |
|
| 查看次数: |
181 次 |
| 最近记录: |