Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/unix/3.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
Regex 使用shell脚本删除“|”分隔符和“,”分隔符之间的文本_Regex_Unix_Sh_Ksh - Fatal编程技术网

Regex 使用shell脚本删除“|”分隔符和“,”分隔符之间的文本

Regex 使用shell脚本删除“|”分隔符和“,”分隔符之间的文本,regex,unix,sh,ksh,Regex,Unix,Sh,Ksh,我有一个从数据库中提取的大型多行文件。该文件的字段由逗号分隔,如果该字段有多个值,则这些值由逗号分隔| 输入示例: 姓名、职务、电子邮件1 |电子邮件2 |电子邮件3、电话、地址 在shell脚本中,我需要删除| email2 | email3 示例输出: 姓名、职务、电子邮件1、电话、地址 我需要对文件中的每一行执行此操作。尝试sed: 结果: h2co3-macbook:~ h2co3$ echo "name,title,email1|email2|email3,phone,address"

我有一个从数据库中提取的大型多行文件。该文件的字段由逗号分隔,如果该字段有多个值,则这些值由逗号分隔|

输入示例: 姓名、职务、电子邮件1 |电子邮件2 |电子邮件3、电话、地址

在shell脚本中,我需要删除| email2 | email3

示例输出: 姓名、职务、电子邮件1、电话、地址

我需要对文件中的每一行执行此操作。

尝试sed:

结果:

h2co3-macbook:~ h2co3$ echo "name,title,email1|email2|email3,phone,address" | sed "s/\|[^,]*//g"
name,title,email1,phone,address
h2co3-macbook:~ h2co3$ 
试试sed:

结果:

h2co3-macbook:~ h2co3$ echo "name,title,email1|email2|email3,phone,address" | sed "s/\|[^,]*//g"
name,title,email1,phone,address
h2co3-macbook:~ h2co3$ 
使用sed:

sed -i 's/|[^,]*//g' filename
注意,在大多数正则表达式风格中,|是一个指定交替的特殊字符,要匹配文字,|需要使用\|。除非指定了扩展正则表达式选项,否则sed不适用于匹配文字“您使用”的情况,也不适用于交替使用\ \的情况。

使用sed:

sed -i 's/|[^,]*//g' filename

注意,在大多数正则表达式风格中,|是一个指定交替的特殊字符,要匹配文字,|需要使用\|。除非指定了扩展正则表达式选项,否则sed的情况并非如此,要匹配文字“您使用”,而要进行替换,则使用\.

将sed与内联选项一起使用:

sed -i.bak 's/|[^|,]*//g' inFile

现场演示:使用sed和内联选项:

sed -i.bak 's/|[^|,]*//g' inFile

现场演示:此答案将输入拆分为字段,并输出所需的字段

awk -F'[|,]' -v OFS=, '{print $1, $2, $3, $(NF-1), $NF}' file

此答案将输入拆分为多个字段,并输出所需的字段

awk -F'[|,]' -v OFS=, '{print $1, $2, $3, $(NF-1), $NF}' file

我相信你根本不需要逃避,在那个例子中,我相信你根本不需要逃避