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>
被跳过了。
我有一个包含以下形式条目的文件:
"/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>
被跳过了。