我有一个包含以下表单条目的文件:
"/application/device/android/device-id", "/application/device/ios/device-id", "/application/device/windows/device-id"
我想通过删除部分/application/device
和最后部分/device-id
来自动简化上述内容。
完成此操作后,可能包含数千个条目的文件将包含模式:
android, ios, windows
我该怎么做?
答案 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
。