Regex Linux脚本解析每一行,检查正则表达式并修改该行
我正在尝试编写一个linux bash脚本,该脚本将输入一个csv文件,其中的行以以下格式写入(某些内容可能为空): 我必须将以下格式作为输出(如果行包含Regex Linux脚本解析每一行,检查正则表达式并修改该行,regex,linux,bash,shell,csv,Regex,Linux,Bash,Shell,Csv,我正在尝试编写一个linux bash脚本,该脚本将输入一个csv文件,其中的行以以下格式写入(某些内容可能为空): 我必须将以下格式作为输出(如果行包含,则必须将substring1、substring2中的两个子字符串分开,并删除一个、字符,否则什么也不做) 我试图解析文件的每一行并检查它是否遵守正则表达式,但该命令启动了一个永无止境的循环(不知道为什么),morevor不知道如何将子字符串分割为输出子字符串1、子字符串2 for f in /filepath/filename.csv do
,则必须将substring1、substring2中的两个子字符串分开,并删除一个、
字符,否则什么也不做)
我试图解析文件的每一行并检查它是否遵守正则表达式,但该命令启动了一个永无止境的循环(不知道为什么),morevor不知道如何将子字符串分割为输出子字符串1、子字符串2
for f in /filepath/filename.csv
do
while read p; do
if [[$p == .\..]] ; then echo $p; fi
done <$f
done
用于/filepath/filename.csv中的f
做
读p;做
如果[$p=.\..];然后echo$p;fi
完成目前我无法为您提供有效的代码,但有一条快速建议:
1.尝试使用名为sed的工具
2.了解regex的“捕获组”,以获取如何基于表达式分割文本的信息。分离字符串AWK将非常有用
echo "Hello.world" | awk -F"." '{print "STR1="$1", STR2="$2 }'
希望它能有所帮助。由于您的任务更多的是转换不相关的文本行,而不是解析csv格式文件的字段,sed
确实是一个可以使用的工具
学习正确地使用sed,即使是最基本的任务,也是学习正则表达式的同义词。以下调用sed
命令可将输入样本转换为预期输出:
sed 's/\.\([^,]*\),/,\1/g' input.csv >output.csv
在上面的示例中,s//
是替换命令。
从手册页:
s/regexp/replacement/
尝试将regexp与模式空间匹配。如果成功,
替换与替换匹配的部分。[……]
解释regexp和替换上述命令可能超出了问题的范围,因此我将在这里完成我的回答。。。希望有帮助 好的,我设法使用了regexp,但是下面的命令似乎不再起作用了:
sed '\([^,]*\),\([^,]*\)\.\([^,]*\),,\([^,]*\),\([^,]*\),\([^,]*\),\([^,]*\),\([^,]*\),\([^,]*\),\([^,]*\),\([^,]*\),\([^,]*\),/\1,\2,\3,\4,\5,\6,\7,\8,\9,\10,\11,\12,'
sed:-e表达式#1,char 125:未知命令:`\'您的输入不包含点,并且您的预期输出与输入相同
sed 's/\.\([^,]*\),/,\1/g' input.csv >output.csv
sed '\([^,]*\),\([^,]*\)\.\([^,]*\),,\([^,]*\),\([^,]*\),\([^,]*\),\([^,]*\),\([^,]*\),\([^,]*\),\([^,]*\),\([^,]*\),\([^,]*\),/\1,\2,\3,\4,\5,\6,\7,\8,\9,\10,\11,\12,'