AWK/Sed字符串操作
我有一个以下格式的字符串,我想将其转换为csv格式(注意分隔符是下划线字符“\u1”)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 但是,尝试解析标题字段中包含下划线的字符串时会遇到一些麻烦。。 我想保留标题中的下划线(如果有),但将标题中的下划线改
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