用于解析每一行的Linux脚本,检查正则表达式并修改该行

时间:2016-03-10 11:07:15

标签: regex linux bash shell csv

我试图编写一个linux bash脚本,该脚本输入一个csv文件,其中的行用以下格式编写(有些东西可能是空白的):

something,something,,number,something,something,something,something,something,something,,,
something,something.something,,number,something,something,something,something,something,something,,,

并且我必须输出以下格式(如果行包含.,它必须将substring1,substring2中的两个子字符串分开并删除一个,字符,否则什么都不做)

something,something,,number,something,something,something,something,something,something,,,
something,something,something,number,something,something,something,something,something,something,,,

我试图解析文件的每一行并检查它是否尊重正则表达式,但命令启动一个永无止境的循环(不知道为什么)并且更多的人不知道如何划分子串输出substring1,substring2

for f in /filepath/filename.csv
do
            while read p; do
            if [[$p == .\..]] ; then echo $p; fi
            done <$f
done

提前致谢!

4 个答案:

答案 0 :(得分:0)

我目前无法为您提供工作代码,但有一条快速建议: 1.尝试使用名为sed的工具 2.了解&#34;捕捉群体&#34;正则表达式获取有关如何基于表达式划分文本的信息。

答案 1 :(得分:0)

要分开字符串,AWK将非常有用

    echo "Hello.world" | awk -F"." '{print "STR1="$1", STR2="$2 }'

希望它会有所帮助。

答案 2 :(得分:0)

由于你的任务更多的是转换不相关的文本行而不是解析csv格式文件的字段,Membership确实是要用的工具。

学习正确使用$_SESSION['full_name'] = $ensure_credentials;,即使是最基本的任务,也是学习正则表达式的同义词。以下sed命令调用将输入样本转换为预期输出:

sed

在上面的示例中,sed是替换命令。 从联机帮助页:

  

S /的regexp /更换/

     

尝试将regexp与模式空间匹配。如果成功,   替换与替换匹配的部分。 [...]

解释正则表达式并替换上述命令可能超出了问题的范围,所以我将在这里完成我的答案......希望它有所帮助!

答案 3 :(得分:0)

好的,我设法使用regexp,但以下命令似乎无法再次运行:

sed '\([^,]*\),\([^,]*\)\.\([^,]*\),,\([^,]*\),\([^,]*\),\([^,]*\),\([^,]*\),\([^,]*\),\([^,]*\),\([^,]*\),\([^,]*\),\([^,]*\),/\1,\2,\3,\4,\5,\6,\7,\8,\9,\10,\11,\12,'

sed:-e expression#1,char 125:unknown命令:`\'