猫多个文件,但包括文件名作为标题
我想将多个文本文件连接成terminal中的一个大文件。 我知道我可以使用cat命令来做到这一点。 不过,我希望每个文件的文件名在该文件的“数据转储”之前。 有人知道怎么做吗?
我目前有什么:
file1.txt = bluemoongoodbeer file2.txt = awesomepossum file3.txt = hownowbrowncow cat file1.txt file2.txt file3.txt
所需的输出:
file1 bluemoongoodbeer file2 awesomepossum file3 hownowbrowncow
正在寻找同样的事情,并发现这个build议:
tail -vn +1 file1.txt file2.txt file3.txt
输出:
==> file1.txt <== <contents of file1.txt> ==> file2.txt <== <contents of file2.txt> ==> file3.txt <== <contents of file3.txt>
如果只有一个文件,那么标题将不会被打印。 因此,请使用-v
总是打印标题。
我用类似grep的东西:
grep "" *.txt
它不会给你一个“标题”,而是在每一行前加上文件名。
这也应该做的伎俩:
find . -type f -print -exec cat {} \;
手段:
find = linux `find` command finds filenames, see `man find` for more info . = in current directory -type f = only files, not directories -print = show found file -exec = additionally execute another linux command cat = linux `cat` command, see `man cat`, displays file contents {} = placeholder for the currently found filename \; = tell `find` command that it ends now here
您可以进一步将search槽合并为布尔运算符,如-and
或-or
。 find -ls
也很好。
这应该做的伎俩:
for filename in file1.txt file2.txt file3.txt; do echo "$filename" cat "$filename" done > output.txt
或者recursion地为所有文本文件执行此操作:
find . -type f -name '*.txt' -print | while read filename; do echo "$filename" cat "$filename" done > output.txt
find . -type f -print0 | xargs -0 -I % sh -c 'echo %; cat %'
这将打印完整的文件名(包括path),然后打印文件的内容。 这也是非常灵活的,因为你可以使用-name“expr”作为find命令,并且在文件上运行尽可能多的命令。
我有一系列以stats.txt结尾的文件,我想将它们与文件名连接起来。
我做了以下事情,当有多个文件时,“more”命令将文件名作为标题。
more *stats.txt > stats.txt
或一般情况下
more FILES_TO_CONCAT > OUTPUT_FILE
这是我通常如何处理格式:
for i in *; do echo "$i"; echo ; cat "$i"; echo ; done ;
我通常会把猫变成grep来获得具体的信息。
你可以使用这个简单的命令而不是使用for循环,
ls -ltr | awk '{print $9}' | xargs head
这是一个非常简单的方法。 你说你想猫,这意味着你想查看整个文件。 但是你也需要打印文件名。
尝试这个
head -n99999999 *
或head -n99999999 file1.txt file2.txt file3.txt
希望有所帮助
如果你喜欢颜色,试试这个:
for i in *; do echo; echo $'\e[33;1m'$i$'\e[0m'; cat $i; done | less -R
要么:
tail -n +1 * | grep -e $ -e '==.*'
或:(安装包装“multitail”)
multitail *
此方法将打印文件名,然后文件内容:
tail -f file1.txt file2.txt
输出:
==> file1.txt <== contents of file1.txt ... contents of file1.txt ... ==> file2.txt <== contents of file2.txt ... contents of file2.txt ...
find . -type f -exec cat {} \; -print
如果你想要的结果与你想要的输出相同的格式,你可以尝试:
for file in `ls file{1..3}.txt`; \ do echo $file | cut -d '.' -f 1; \ cat $file ; done;
结果:
file1 bluemoongoodbeer file2 awesomepossum file3 hownowbrowncow
您可以在切割前后放置echo -e
,这样您的行之间也有间距:
$ for file in `ls file{1..3}.txt`; do echo $file | cut -d '.' -f 1; echo -e; cat $file; echo -e ; done;
结果:
file1 bluemoongoodbeer file2 awesomepossum file3 hownowbrowncow
- AIX 7.1 ksh
向那些已经为我们中的一些人提过头像的人们炫耀:
$ r head head file*.txt ==> file1.txt <== xxx 111 ==> file2.txt <== yyy 222 nyuk nyuk nyuk ==> file3.txt <== zzz $
我的需要是读第一行; 如上所述,如果你想要超过10行,你必须添加选项(头-9999等)。
抱歉发布衍生评论; 我没有足够的街道评价/添加到某人的评论。
我喜欢这个选项
for x in $(ls ./*.php); do echo $x; cat $x | grep -i 'menuItem'; done
输出如下所示:
./debug-things.php ./Facebook.Pixel.Code.php ./footer.trusted.seller.items.php ./GoogleAnalytics.php ./JivositeCode.php ./Live-Messenger.php ./mPopex.php ./NOTIFICATIONS-box.php ./reviewPopUp_Frame.php $('#top-nav-scroller-pos-<?=$active**MenuItem**;?>').addClass('active'); gotTo**MenuItem**(); ./Reviews-Frames-PopUps.php ./social.media.login.btns.php ./social-side-bar.php ./staticWalletsAlerst.php ./tmp-fix.php ./top-nav-scroller.php $active**MenuItem** = '0'; $active**MenuItem** = '1'; $active**MenuItem** = '2'; $active**MenuItem** = '3'; ./Waiting-Overlay.php ./Yandex.Metrika.php