簡體   English   中英

Linux bash:sed、awk 等工具匹配行尾正則表達式“$”作為終端寬度

[英]Linux bash: sed, awk, etc tools are matching end of line regex '$' as the terminal width

我正在處理相當長的數據行,因此字符數比終端的寬度多。 當我使用 sed、awk 等將任何字符附加到每行的末尾時,它與終端寬度所在的行尾匹配。 因此,不是將所需的字符附加到每行的末尾,而是將其放置在每行中間的某個位置,在那里終端寬度被切斷。

我該如何解決這個問題?

也許你的文件有一個CRFL回車-換行\\r - \\n )行在不合適的地方結束(例如 Linux 系統中的 Windows 文件或......或......)。 如果您將a s 的價值超過終端寬度寫入文件(1. 我在 Linux 上,2. 不要在終端的末尾按Enter ,畢竟只有一次a s 和那個輸入ctrl - D ):

$ cat > pure_file
aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
aaaaaaaaaaaaaaaaaaaa[the only enter and ctrl-D goes here]

您的文件結尾如下所示:

...aaaaLF

然后在最后添加一個CR

$ awk '{print $0 "\r"}' pure_file > cr_infected_file

(或僅使用上面的unix2dos )並且您的文件結尾如下所示:

...aaaaCRLF

現在將字符X添加到它的末尾:

$ awk '{print $0 "X"}' cr_infected_file
aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
Xaaaaaaaaaaaaaaaaaaaa

和尾巴看起來(在X周圍添加了 2 個空格以供您閱讀):

...aaaaCR X LF

發生的情況是首先輸出所有a s,然后CR將回車返回到行首(當前行,終端上的第 2 行),然后輸出X

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM