AWK/Sed字符串操作

AWK/Sed字符串操作,sed,awk,Sed,Awk,我有一个以下格式的字符串,我想将其转换为csv格式(注意分隔符是下划线字符“\u1”) Title\u yyyyymmdd\u emailname转换为Title,yyyyymmdd,emailname 这是很简单的使用sed echo "Report_20131107_jlsmith" | sed 's/_/,/g' 输出: Report,20131107,jlsmith 但是,尝试解析标题字段中包含下划线的字符串时会遇到一些麻烦。。 我想保留标题中的下划线(如果有),但将标题中的下划线改

我有一个以下格式的字符串,我想将其转换为csv格式(注意分隔符是下划线字符“\u1”)

Title\u yyyyymmdd\u emailname
转换为
Title,yyyyymmdd,emailname

这是很简单的使用sed

echo "Report_20131107_jlsmith" | sed 's/_/,/g'
输出:

Report,20131107,jlsmith
但是,尝试解析标题字段中包含下划线的字符串时会遇到一些麻烦。。 我想保留标题中的下划线(如果有),但将标题中的下划线改为逗号 日期和电子邮件名称

例如:

Report_Title_20131107_jlsmith convert to: Report_Title,20131107,jlsmith
还有一个相关的问题:有没有办法压缩整个字符串中下划线字符的多个重复实例

Report_Title____20131107_jlsmith convert to: Report_Title,20131107,jlsmith
第一个最后请求:

echo "Report_Title____20131107_jlsmith" | awk '{gsub(/_+/,"_")}1'
Report_Title_20131107_jlsmith

第一个请求(使用gnu awk)


一体式命令

echo "Report_Title___more_20131107_jlsmith" | awk '{gsub(/_+/,"_");print gensub(/_([0-9]+)_/,",\\1,","g")}'
Report_Title_more,20131107,jlsmith
使用
sed

sed -r -e 's/_+/_/g' -e 's/_([^_]+)_([^_]+)$/,\1,\2/'
或者使用严格的正则表达式更加健壮

sed -r -e 's/_+/_/g' -e 's/^(.+)_([0-9]{8})_(\w+)$/\1,\2,\3/'

使用所显示的格式,您可以使用以下方法将
,yyyyymmdd,
替换为
,YYYYMMDD,

echo 'Report_Title____20131107_jlsmith' | sed 's/__*\([0-9]\{8\}\)__*/,\1,/g'
Report_Title,20131107,jlsmith
echo 'Report_Title____20131107_jlsmith' | sed 's/__*\([0-9]\{8\}\)__*/,\1,/g'
Report_Title,20131107,jlsmith