我在文件中有以下格式的数据
id : 315,abcid :,abcname :,abcrole :,abctest :,abcsts : Active,abcqwe :
id : 316,abcid :1234 ,abcname : Test,abcrole : No,abctest : 2345,abcsts : Active,abcqwe :
我试图获取所有具有数据的字段:以下格式: -
id : 315,abcsts : Active ,
id : 316,abcid :1234 ,abcname : Test,abcrole : No,abctest : 2345,abcsts : Active,
我尝试使用sed但删除了整个记录。
感谢任何帮助。
此致
答案 0 :(得分:3)
短 foreach (reservation rr in bowlingav)
{
var sql = from r in db.reservations
where rr.Id != r.Id
&& rr.end_time < theEndTimeChosen
select r;
}
解决方案 - 删除无效的字段:
sed
sed -E 's/[^:, ]* *:( *,|$)//g' file
- 匹配字段名称,除了[^:, ]*
,:
和空白,
- 字段名称可以跟随可选的空格' *'
- 将:
与字段名称和字段值之间的分隔符匹配:
- 正则表达式替换组,匹配空字段值(可能带有可选空格( *,|$)
),后跟' *'
(如键/值对之间的分隔符)或字符串,
输出:
$
答案 1 :(得分:2)
Perl救援!
perl -pe 's/(,|^)\S+\s*:(?=,|$)//g' file
(?=...)
是一个先行断言,即它检查后面的字符是逗号还是行尾,但是没有删除它并且没有提升位置下次搜索。
输出与您指定的输出不同:它还会删除最后的逗号。
答案 2 :(得分:2)
在我看来,用awk更好:
$ awk 'BEGIN{RS=",|\n";ORS=",";FS=":";OFS=FS}$2!="";RT=="\n"{printf "\n"}' file1
id : 315,abcsts : Active,
id : 316,abcid :1234 ,abcname : Test,abcrole : No,abctest : 2345,abcsts : Active,
RS
:输入记录分隔符(逗号或换行符)
ORS
:输出记录分隔符
FS
:字段分隔符
OFS
:输出字段分隔符
$2
:使用FS作为分隔符分隔的第二个字段
RT
:记录正在使用的分隔符值(逗号或换行符)
我的解决方案基于调整awk RS
和FS
值。
您可以使用这样的基本awk片段获得一些不错的数据结果:
$ awk 'BEGIN{RS=",|\n";FS=":";OFS=FS}$1=$1' file1
id : 315
abcid :
abcname :
abcrole :
abctest :
abcsts : Active
abcqwe :
id : 316
abcid :1234
abcname : Test
abcrole : No
abctest : 2345
abcsts : Active
abcqwe
使用逗号分割整行。
每个生成的行包含格式为
的字段
property : value
答案 3 :(得分:1)
这可能适合你(GNU sed):
sed -r ':a;s/,[^,]+\s*:(,|$)/\1/;ta' file
迭代地替换逗号,后跟一个单词(不包含逗号),后跟一个或多个空格,后跟冒号后跟逗号或行尾用逗号或行尾。
答案 4 :(得分:0)