有没有办法将'head -1'和'grep'命令合并为一个目录中的所有文件,并将输出重定向到输出文件.我可以使用'sed'来做到这一点,但它似乎没有grep那么快.
sed -n '1p;/6330162/p' infile*.txt > outfile.txt
Run Code Online (Sandbox Code Playgroud)
使用grep我可以一次执行以下一个文件:
head -1 infile1.txt; grep -i '6330162' infile1.txt > outfile.txt
Run Code Online (Sandbox Code Playgroud)
但是,我需要为目录中的所有文件执行此操作.插入通配符没有帮助,因为它首先打印标题然后输出grep输出.
sam*_*est 23
以下意味着您只需要输入一次命令(而不是使用&&并输入两次),这一点也很容易理解.
some-command | { head -1; grep some-stuff; }
Run Code Online (Sandbox Code Playgroud)
例如
ps -ef | { head -1; grep python; }
Run Code Online (Sandbox Code Playgroud)
更新:这似乎只是工作ps,抱歉,但我想这通常是人们想要的.
如果你想让它适用于任意命令,你似乎必须编写一个迷你脚本,例如:
#!/bin/bash
first_line=true
while read -r line; do
if [ "${first_line}" = "true" ]; then
echo "$line"
first_line=false
fi
echo "$line" | grep $*
done
Run Code Online (Sandbox Code Playgroud)
这是我的名字hgrep.sh.然后你可以像这样使用:
ps -ef | ./hgrep.sh -i chrome
Run Code Online (Sandbox Code Playgroud)
这种方法的好处在于我们正在使用grep所有标志的工作方式完全相同.
这将通过使用单个接收命令来工作:
some-command | sed -n '1p;/PATTERN/p'
Run Code Online (Sandbox Code Playgroud)
将其与多行标题一起使用也很容易:
$ sudo netstat --tcp --udp --listening --numeric --program | sed --quiet '1,2p;/ssh/p'
Active Internet connections (only servers)
Proto Recv-Q Send-Q Local Address Foreign Address State PID/Program name
tcp 0 0 0.0.0.0:22 0.0.0.0:* LISTEN 1258/sshd
tcp6 0 0 :::22 :::* LISTEN 1258/sshd
Run Code Online (Sandbox Code Playgroud)
要重申,@ samthebest的解决方案将只在非常特殊的情况下工作; 这将与任何写入标准输出的命令一起使用。
for file in *
do
[ "$file" = outfile.txt ] && continue
head -n 1 "$file"
grep -i '...' "$file"
done > outfile.txt
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
13131 次 |
| 最近记录: |