Text-Processing

將包含單引號並用逗號分隔的單詞的行轉換為列

  • January 19, 2022

我有這個文件:

'dog', 'cat', 'horse', 'turtle'

我想將該行轉換為:

dog
cat
horse
turtle

如果我只使用逗號作為分隔符和命令 tr 我可以這樣做:

tr -s ',' '\n' < file

與輸出

'dog'
'cat'
'horse'
'turtle'

但是當我', '用作分隔符時,這不起作用:

tr -s '\', \'' '\n' < file

即使我使用雙反斜杠來轉義單引號,它仍然不起作用。我在終端中得到的唯一輸出是>.

如何正確轉義單引號以獲得所需的輸出?

將輸入視為帶引號的 CSV,在每個逗號分隔符後使用可跳過的空格,並使用單引號而不是標準雙引號作為引號字元,我們可以csvformat用來重新格式化數據:

$ csvformat -S -q "'" -D $'\n' file
dog
cat
horse
turtle

這使用csvformatwith-S跳過每個分隔符後的初始空白字元,-q "'"將輸入引號字元設置為單引號,然後-D $'\n'將輸出欄位分隔符設置為換行符。

然後重新格式化該文件。

任何使用嵌入換行符的欄位都將在輸出中被引用,包含嵌入雙引號的欄位也是如此。

tr適用於集合,而不是字元串。第一組中的每個第一個符號被第二組中的第一個符號替換,第一組中的第二個符號被第二組中的第二個符號替換,等等。

如果第二組的符號少於第一組 - 第一組中沒有正確配對的所有符號都將替換為第二組的最後一個符號。

你需要

tr -s "\', "  '\n' < file

每個撇號、逗號和空格都替換為換行符,但 -s 選項將它們全部壓縮到一個 LF 實例中。

引用自:https://unix.stackexchange.com/questions/683191