Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/bash/18.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Bash 如何删除多个反斜杠之间的|_Bash_Shell_Sed_Awk - Fatal编程技术网

Bash 如何删除多个反斜杠之间的|

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

我以前在这里也回答过类似的问题,但这一次,对我来说更具挑战性,我所需要的只是删除名称“\WAPNER | john | M\”之间的|

这将是一个加号,以消除背部斜线太多

文件

期望输出

 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