[英]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.