Bash 如何删除多个反斜杠之间的|
我以前在这里也回答过类似的问题,但这一次,对我来说更具挑战性,我所需要的只是删除名称“\WAPNER | john | M\”之间的| 这将是一个加号,以消除背部斜线太多 文件 期望输出Bash 如何删除多个反斜杠之间的|,bash,shell,sed,awk,Bash,Shell,Sed,Awk,我以前在这里也回答过类似的问题,但这一次,对我来说更具挑战性,我所需要的只是删除名称“\WAPNER | john | M\”之间的| 这将是一个加号,以消除背部斜线太多 文件 期望输出 10.46|5060|100002366551140|\WAPNER john M\ |100002366551750 如果您的解决方案也可以使用带有单斜杠的名称,那将是完美的:) 输出将是 10.46|5060|100002366551140|\WAPNER M\ |100002366551750
10.46|5060|100002366551140|\WAPNER john M\ |100002366551750
如果您的解决方案也可以使用带有单斜杠的名称,那将是完美的:)
输出将是
10.46|5060|100002366551140|\WAPNER M\ |100002366551750
多谢各位
$ echo "10.46|5060|100002366551140|\WAPNER| john | M\ |100002366551750" | awk -F'|' '{print $1"|"$2"|"$3"|"$4$5$6"|"$7}' | sed s.\\\\..g
10.46|5060|100002366551140|WAPNER john M |100002366551750
注意,只有在始终有3个“|”字符要删除的情况下,它才起作用
更新:似乎我没有注意到标题-如果您想删除一对“\”之间的所有“|”字符,jim mcnamara的解决方案会更好
注意,只有在始终有3个“|”字符要删除的情况下,它才起作用
更新:似乎我没有注意到标题-如果你想删除一对“\”之间的所有“|”字符,吉姆·麦克纳马拉的解决方案更好。试试这个
awk -F '\\' '{ gsub("|", "", $2); print $0 }' inputfile > newfile
试试这个
awk -F '\\' '{ gsub("|", "", $2); print $0 }' inputfile > newfile
这可能适用于您(GNU-Sed):
这可能适用于您(GNU-Sed):
试试这个
sed-re's/\\(\w+)(\w*)(\\\\)([A-Za-z]+)\\/\1\3\5/g'temp.txt
输出
10.46 | 5060 | 100002366551140 |瓦普纳约翰M | 100002366551750
试试这个
sed-re's/\\(\w+)(\w*)(\\\\)([A-Za-z]+)\\/\1\3\5/g'temp.txt
输出
10.46 | 5060 | 100002366551140 |瓦普纳·约翰·M | 100002366551750
对于带有两个斜杠的名称也适用吗?示例\WAPNER | M \是的,删除斜杠是因为IFS设置为\这是转义反斜杠“\\”。OFS保留默认值,因此当写入$0字符串时,打印时将忽略所有\chars。如果您必须保留一些,则此代码将不适用于您。+1表示解决方案,但在您的注释中它不是IFS。对于@user1007727-不要不断更改您的要求,只需告诉我们您真正需要做什么,这样我们就可以帮助您一次性解决问题。对于有两个斜杠的名称,这也适用吗?示例\WAPNER | M \是的,删除斜杠是因为IFS设置为\这是转义反斜杠“\\”。OFS保留默认值,因此当写入$0字符串时,打印时将忽略所有\chars。如果您必须保留一些,则此代码将不适用于您。+1表示解决方案,但在您的注释中它不是IFS。对于@user1007727-不要不断更改您的要求,只需告诉我们您真正需要做什么,我们就可以帮您解决一次。您已经问过了。那里的答案有用吗?如果没有,您可以评论和编辑您的问题,而不是创建一个副本。您已经问过这个问题。那里的答案有用吗?如果没有,您可以评论和编辑您的问题,而不是创建一个副本。
awk -F '\\' '{ gsub("|", "", $2); print $0 }' inputfile > newfile
sed -r '/\\[^\\]*\\/{s//\n&\n/;h;s/[\\|]//g;G;s/.*\n(.*)\n.*\n(.*)\n.*\n/\2\1/}' file