[英]awk/sed on csv with #text
我是這里的新手,所以任何方向都會有所幫助。 有一個 csv 文件(逗號分隔),並且在其中一列中有用 # 符號分隔的文本(該列本身用 # 分隔)。 這是一行的示例:
text,text devicetype,cidr,text#more text#XXXX|more
text#even more text#more
text#text_toreplace#text|text#text
text_toreplace 是我想要用不同的文本替換的內容,而不更改列中值為“text#more text#XXXX|more text#even more text#more text#text_toreplace#text|text#text”的數據的所有 rest
CSV 確實有第一個 raw 作為標題,之后會有多行。
示例 output 與由 # 限定的 coumn 和一個值差異完全相同:
text,text devicetype,cidr,text#more text#XXXX|more
text#even more text#more
text#REPLACED_TEXT#text|text#text
想法
使用#
作為“主要”字段分隔符,遍歷字段以替換有問題的文本。
awk -F'#' -v OFS='#' '{
for (i=1; i<=NF; i++)
if ($i == "text_toreplace")
$i = "REPLACED_TEXT"
print
}' <<'END_INPUT'
text,text devicetype,cidr,text#more text#XXXX|more
text#even more text#more
text#text_toreplace#text|text#text
END_INPUT
text,text devicetype,cidr,text#more text#XXXX|more
text#even more text#more
text#REPLACED_TEXT#text|text#text
使用sed
會更容易
$ sed -E 's/(^|#)(text_toreplace)(#|$)/\1REPLACED_TEXT\3/g' file
匹配第一個和最后一個字段所需的錨點。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.