파일 이름 뒤에 콘텐츠가 표시되며 상호 작용이 필요하지 않습니다.

파일 이름 뒤에 콘텐츠가 표시되며 상호 작용이 필요하지 않습니다.

내 프로그램은 30초마다 여러 파일에 상태를 기록하고(덮어쓰기) "more"와 같이 표시된 파일 이름으로 해당 파일을 보고 싶습니다. 좋다:

$ echo 1234 > test00
$ echo 5678 > test01
$ ls
test00  test01
$ more *
::::::::::::::
test00
::::::::::::::
1234
::::::::::::::
test01
::::::::::::::
5678

"더 보기"의 경우 다음 파일을 보려면 스페이스바를 눌러야 합니다.

  • 내가 원하는 것은 어떻게 든 내용 앞의 파일 이름입니다
  • "tail"을 시도했지만 Ctrl+를 해야 했습니다 C. 작은 프로그램을 작성하는 것이 가능하지만 "와 같은 작업을 수행하지 않고도 이 작업(파일 이름과 파일 내용 표시)을 수행할 수 있는 표준 유닉스 프로그램이 있는지 궁금합니다. 추가 사용자 상호작용을 위한 more"

답변1

출력이 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

답변2

당신이 할 수 있는 일이 몇 가지 있습니다.

headtail다 기본적으로 파일의 처음 10줄이 표시되도록 지정합니다. 그러나 여러 인수로 호출하면 모든 줄에 대해 이 작업이 수행되고 각 파일의 파일 이름이 표시됩니다. 물론 각 행에 대해 매개변수를 사용하여 -n[num]표시하려는 기본 10개 행 외에 행 수를 지정할 수 있습니다. 나는 귀하의 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단일 파일만 처리하는 경우에도 여러 파일 인수 동작을 적용하고 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'

...그러나 이것은 실용적이지 않을 수 있습니다.

답변3

나는 다음을 사용할 것이다 awk:

awk 'FNR==1{print "::::\n"FILENAME"\n::::"}1' *

답변4

cat대안bat파일 이름, 구분 기호 및 줄 번호를 포함하여 여러 파일의 내용을 매우 잘 보여줍니다.

$ printf '%s\n' 1234 > test00

$ printf '%s\n' 5 67 8 > test01

$ bat test*
───────┬───────────────────────────────────────
       │ File: test00
───────┼───────────────────────────────────────
   1   │ 1234
───────┴───────────────────────────────────────
───────┬───────────────────────────────────────
       │ File: test01
───────┼───────────────────────────────────────
   1   │ 5
   2   │ 67
   3   │ 8
───────┴───────────────────────────────────────

관련 정보