bash在特定模式之前插入一个新行

时间:2016-03-02 22:53:23

标签: string macos bash newline

我有一个csv文件,其中包含以下内容:

"user1","track1","player1" "user1","track2","player2" "user2","track1","player1""user2","track2","player2".....

我需要在此模式之前插入一个新行:"user。 实际上在开始时我用这个命令用新行代替每个空格

awk -v RS=" " '{print}' myfile >output.csv

然后我发现在我的文件中的某些点上,在某些用户之前没有空格,当我插入数据库时​​,列的值在这些点交换了......:|。所以我想知道是否有人知道如何在特定字符集之前插入新行以避免该问题..

谢谢,

2 个答案:

答案 0 :(得分:1)

使用 GNU <div class="panel-body"> <form action = "<?base_url();?>" method = "POST"> <fieldset> <div class="form-group"> <input class="form-control" placeholder="Username" name="username"> </div> <div class="form-group"> <input class="form-control" placeholder="Password" name="password" type="password" value=""> </div> <input type = "submit" class="btn btn-lg btn-success btn-block" value = "Login" name = "login"> </fieldset> </form> </div> ,你可以试试这个:

sed

使用BSD / OSX sed -r 's/(.)("user)/\1\n\2/g' myfile >output.csv (在替换字符串中不支持转义序列sed,使用ANSI C-quoted string字符串),请使用:

\n

严格遵守POSIX sed -E $'s/(.)("user)/\\1\\\n\\2/g' myfile >output.csv # Alternative, with the ANSI C-quoted quoted string spliced in only where needed. sed -E 's/(.)("user)/\1\'$'\n''\2/g' myfile >output.csv ,使用文字换行而不是转义序列sed

\n

请注意,对于您的示例输入,某些行将具有尾随空格。

答案 1 :(得分:1)

使用awk

awk  '{gsub(/"user/,"\n\"user"); print}' file

如果文件以"user

开头,则会有一个领先的CR

如果你想摆脱它,你可以这样做:

awk  '{gsub(/"user/,"\n\"user"); sub(/^\n/,""); print}' file