Sed 从相对URL搜索/替换名称

Sed 从相对URL搜索/替换名称,sed,grep,vi,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 我该怎么做呢?sed

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

"/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~\1~g' file
输出(针对当前测试文件):

使用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

awk'BEGIN{FS=“/”;}{for(i=4;i用shell参数展开:

while IFS= read -r line; do
    printf '%s\n' "${line//@(\"\/application\/device\/|\/device-id\")}"
done < infile
当IFS=read-r行时;执行
printf'%s\n'${line/@(\“\/application\/device\/\\/device id\”)
完成<填充
这需要
extglob
shell选项来启用
@(pattern1 | pattern2)
模式


使用的扩展形式是
${parameter//pattern/string}
,它将
pattern
的所有实例替换为
string
——在本例中是空字符串,因此跳过了
/string

您肯定很好地回答了我的问题!唯一的问题是,如果设备部分是“device”,该怎么办,可以是一个动态单词?例如,它可以是abcdef或abc def。对不起,我的错!@user1721180,如果设备部分将是动态的,请使用我更新的表达式
while IFS= read -r line; do
    printf '%s\n' "${line//@(\"\/application\/device\/|\/device-id\")}"
done < infile