我试图编写一个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
提前致谢!
答案 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命令:`\'