Bash

如何在bash中列印除最後n個字元之外的所有字元?

  • April 20, 2014

我正在使用標準輸入(cat將兩個文件放在一起),並且希望將結果的最後 10 個字元以外的所有字元都通過下一個命令傳遞。

我可以通過搜尋找到的所有內容是使用sed,awktr刪除每行的最後 n 個字元,或head,tailrev刪除 n 行。

我可以用什麼來從通過管道傳輸到命令中的標準輸出來做到這一點(希望簡單地使用單個命令)?

例子:

Input:
SELECT 'A', 1, GETDATE() UNION ALL
SELECT 'B', 2, GETDATE() UNION ALL
...
SELECT 'Z', 2, GETDATE() UNION ALL

Output:
SELECT 'A', 1, GETDATE() UNION ALL
SELECT 'B', 2, GETDATE() UNION ALL
...
SELECT 'Z', 2, GETDATE()

對於它的價值,我在 Windows 上使用 CygWin,所以它需要使用相當標準和舊的 unix 工具:(

你可以使用head

command | head -c-10

將從command輸出中刪除最後 10 個字節。

引自man head

  -c, --bytes=[-]K
         print the first K bytes of each  file;  with  the  leading  `-',
         print all but the last K bytes of each file

由於您特別提到要刪除的 10 個字元將出現在一行中,因此您也可以使用sed。將命令輸出通過管道傳輸到:

sed '$s/\(.\{10\}\)$//'

或者如果您sed支持擴展正則表達式:

sed -r '$s/.{10}$//'

語法將與使用類似perl

perl -pe 's/.{10}$// if eof'

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