从相对URL搜索/替换名称

时间:2017-05-14 17:15:18

标签: sed grep vi

我有一个包含以下表单条目的文件:

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

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

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

android, ios, windows

我该怎么做?

3 个答案:

答案 0 :(得分:1)

sed 方法:

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

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

"android", "ios", "windows"

答案 1 :(得分:1)

使用awk:

awk -F"/" '{print $4,$8,$12}' filename

或使用逗号作为分隔符:

awk  'BEGIN {FS="/"; OFS=", ";} {print $4,$8,$12}' 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

答案 2 :(得分:0)

使用shell参数扩展:

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

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

所使用的扩展格式为${parameter//pattern/string},在 pattern 中替换 string 的所有实例 - 在我们的案例中空字符串,因此跳过了/string