Filenames
顯示文件名後跟內容而不進行互動
我的程序每 30 秒左右將狀態寫入幾個文件(覆蓋),我想用顯示的文件名來查看它們,就像“更多”一樣。像:
$ echo 1234 > test00 $ echo 5678 > test01 $ ls test00 test01 $ more * :::::::::::::: test00 :::::::::::::: 1234 :::::::::::::: test01 :::::::::::::: 5678
對於“更多”,您必須按空格來獲取下一個文件。
- 我想要的是內容之前的文件名以某種方式
- 我嘗試了“tail”,但必須
Ctrl
+C
,可以編寫一個小程序,但我想知道是否有任何標準的 unix 程序可以做到這一點(顯示文件名,後跟文件內容),而無需像“更多”那樣進行進一步的使用者互動
如果輸出
more
是可以接受的,只需將其通過管道cat
:more * | cat
這將消除“更多”提示。
或者,您可以使用單線對顯示進行更多控制
printf
:for fn in *; do printf "::::::\n$fn\n:::::\n"; cat "$fn"; done
或作為腳本:
for fn in $*; do printf "vvvvvvvvvv\n$fn\n^^^^^^^^^^\n" cat "$fn" done
你可以做幾件事。
head
並且tail
預設情況下都指定顯示文件的前十行/最後十行 - 但如果呼叫 w/ 多個參數,將為所有參數執行此操作並顯示每個文件的文件名。當然,對於每一個,您可以使用-n[num]
參數來指定要顯示的預設十行以外的行數。我假設您的 CTRL-C 問題與該-f
選項有關 - 它將指示tail
跟隨文件 - 您可能應該將其排除在外。您可能會做的另一件事 - 這將導致輸出與問題中的略有不同,但您可能仍然喜歡的是……
grep -F '' ./*files
grep
當給定多個文件名參數時,還指定顯示匹配的文件名 - 但grep
在每一行的開頭。像seq 10 >nums.txt; grep -F '' /dev/null nums.txt
…列印…
nums.txt:1 nums.txt:2 nums.txt:3 nums.txt:4 nums.txt:5 nums.txt:6 nums.txt:7 nums.txt:8 nums.txt:9 nums.txt:10
…並在我的終端上突出顯示。這
/dev/null
只是一個小技巧,即使只使用單個文件,也可以強制執行多文件 arg 行為,並且grep -F ''
匹配每一行 - 甚至是空白行。這是
head /dev/null nums.txt
:==> /dev/null <== ==> nums.txt <== 1 2 3 4 5 6 7 8 9 10
tail
的輸出在這種情況下是相同的 - 但是,同樣,這兩個實用程序只列印文件的這麼多行。使用最新版本的 GNU
sed
,您可以使用如下F
命令:sed -s 1F ./*files
…或者如果您想要文件名周圍的小邊框…
sed -se '1!b;i\\n---' -e 'F;i\---\n' nums.txt
…確實喜歡…
--- nums.txt --- 1 2 3 4 5 6 7 8 9 10
或者,如果您想冒險,您可以…
tar -c ./*files | tr -s \\0 | cut -d '' -f1,2,13 | tr '\0' '\n'
…但這可能不切實際。