Bash
如何在bash中列印除最後n個字元之外的所有字元?
我正在使用標準輸入(
cat
將兩個文件放在一起),並且希望將結果的最後 10 個字元以外的所有字元都通過下一個命令傳遞。我可以通過搜尋找到的所有內容是使用
sed
,awk
或tr
刪除每行的最後 n 個字元,或head
,tail
或rev
刪除 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'