Search/replace 亲戚的名字 URL

Search/replace name from a relative URL

我有一个包含以下形式条目的文件:

"/application/device/android/device-id", "/application/device/ios/device-id", "/application/device/windows/device-id"

我想通过删除部分 /application/device 和最后一部分 /device-id 来自动简化上面的内容。

完成后,可能包含数千个条目的文件将包含以下模式:

android, ios, windows

我该怎么做?

sed 方法:

sed 's~/application/[^/]*/\([^/]*\)/device-id~~g' file

输出(针对您当前的测试文件):

"android", "ios", "windows"

使用 awk:

awk -F"/" '{print ,,}' filename

或使用逗号作为分隔符:

awk  'BEGIN {FS="/"; OFS=", ";} {print ,,}' filename

如果你有超过 3 个这样的字符串,请在 awk 中使用:

awk  'BEGIN {FS="/";} {for(i=4;i<=NF-4;i+=4) printf "%s",$i" ,"} END {last=int(NF/4)*4; print $last }' filename

使用shell参数扩展:

while IFS= read -r line; do
    printf '%s\n' "${line//@(\"\/application\/device\/|\/device-id\")}"
done < infile

这需要 extglob shell 选项来启用 @(pattern1|pattern2) 模式。

使用的扩展形式为${<i>parameter</i>//<i>pattern</i>/<i>string </i>},将 pattern 的所有实例替换为 string – 在我们的例子是空字符串,所以 /<i>string</i> 被跳过了。