Awk 如何使用sed替换多行中的单词?
我正在尝试编辑如下CSV文件:Awk 如何使用sed替换多行中的单词?,awk,sed,Awk,Sed,我正在尝试编辑如下CSV文件: 1:field1,field2,field3,FIELD I WANT TO REPLACE, fieldx ... 2:field1,field2,field3,FIELD I WANT TO REPLACE, fieldx ... 3:field1,field2,field3,FIELD I WANT TO REPLACE, fieldx ... 5:field1,field2,field3,FIELD I WANT TO REPLACE, fieldx ..
1:field1,field2,field3,FIELD I WANT TO REPLACE, fieldx ...
2:field1,field2,field3,FIELD I WANT TO REPLACE, fieldx ...
3:field1,field2,field3,FIELD I WANT TO REPLACE, fieldx ...
5:field1,field2,field3,FIELD I WANT TO REPLACE, fieldx ...
sed -e 's/FIELD I WANT TO REPLACE/NEW FIELD/' input_file >output_file
我是否可以使用sed
替换搜索我要替换的模式字段
并切换以下内容:
1:field1,field2,field3,NEW FIELD, fieldx ...
2:field1,field2,field3,NEW FIELD, fieldx ...
3:field1,field2,field3,NEW FIELD, fieldx ...
5:field1,field2,field3,NEW FIELD, fieldx ...
你想要的只是一个简单的查找和替换吗?如果是这样,请尝试以下方法:
1:field1,field2,field3,FIELD I WANT TO REPLACE, fieldx ...
2:field1,field2,field3,FIELD I WANT TO REPLACE, fieldx ...
3:field1,field2,field3,FIELD I WANT TO REPLACE, fieldx ...
5:field1,field2,field3,FIELD I WANT TO REPLACE, fieldx ...
sed -e 's/FIELD I WANT TO REPLACE/NEW FIELD/' input_file >output_file
如果您正在寻找更多信息,请进一步解释
希望这能有所帮助。这是可行的,但我希望有更优雅的解决方案(可能是awk): 因此,我的
sed
匹配:
一个字符后跟::
:3列*,*,*
:第4列。我决定在第四列加上逗号,以便更清楚地阅读,*,
:第4列后面的所有内容*
:将所有内容放在第4列之前、新字段以及第4列之后\1,新字段,\2
awk 'BEGIN{FS=OFS=","}{$5="SOME NEW TEXT"}1' file
根据你想要做的评论
$ sed -i.bak 's/,Service desk procedure1,/,Service desk procedure2,/' file
如果搜索的字符串作为子字符串存在于其他地方,则逗号用于消除意外匹配。另外,没有设置g
标志,我们将每行限制为一个匹配
这将进行替换,旧版本将改名为代码> BAK<代码>后缀.< /P> < P>您可以考虑适当的CSV解析器。例如,ruby附带了一个:
ruby -rcsv -e '
f = ARGV.shift
# read the data
data = CSV.read(f)
# make your updates
data.each {|row| row[6]="Service desk procedure2"}
# write back to the file
CSV.open(f, "w") {|csv| data.each {|row| csv << row}}
' file
这可能适用于您(GNU-sed):
将第四次出现的零个或多个非逗号字符替换为文字
新字段
除初始字段外,所有行是否都相同?如果不是,匹配和替换的值在哪里?问题是,如果第二行中的值与第一个字段中的值不同,您希望如何匹配它们并将其替换为值?也许您想更改csv文件中的第4列?主机名、客户端名称、ID标记、操作系统、位置、注释、服务台程序1、字段主机名、客户端名称、ID标记、操作系统、位置、注释、服务台程序1、字段主机名、客户端名称、ID标记、操作系统、位置、注释、服务台程序1、字段,我想更改为主机名、客户端名称、ID标记、操作系统、位置,注释,服务台程序2,字段主机名,clientname,ID标记,操作系统,位置,注释,服务台程序2,字段主机名,clientname,ID标记,操作系统,位置,注释,服务台程序2,字段我通常使用atom或notepad++来做这件事,但由于超过20k行,应用程序崩溃。对不起,这不是StackOverflow的工作方式。形式为“我想做X,请给我提示和/或示例代码”的问题被认为是离题的。请访问并阅读,特别是阅读您的问题不清楚。您是要替换我要替换的文本字段,无论它出现在哪里,还是要替换第四个字段中的任何文本?
sed 's/[^,]*/NEW FIELD/4' file