有没有办法将'head -1'和'grep'命令合并为一个目录中的所有文件,并将输出重定向到输出文件。我可以使用'sed'来做到这一点,但它似乎没有grep那么快。
sed -n '1p;/6330162/p' infile*.txt > outfile.txt
使用grep我可以一次执行以下一个文件:
head -1 infile1.txt; grep -i '6330162' infile1.txt > outfile.txt
但是,我需要对目录中的所有文件执行此操作。插入通配符没有帮助,因为它首先打印标题然后输出grep输出。
答案 0 :(得分:22)
以下表示您只需输入一次命令(而不是使用&&并输入两次),这一点也很容易理解。
some-command | { head -1; grep some-stuff; }
e.g。
ps -ef | { head -1; grep python; }
更新:这似乎只适用于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
我将其命名为hgrep.sh
。然后你就可以这样使用:
ps -ef | ./hgrep.sh -i chrome
这种方法的好处是我们使用grep
所以所有标志的工作方式完全相同。
答案 1 :(得分:5)
这可以通过使用单个接收命令来实现:
some-command | sed -n '1p;/PATTERN/p'
使用多行标题也很容易使用它:
$ 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
至reiterate,@ samthebest的解决方案仅适用于非常具体的情况;这适用于任何写入标准输出的命令。
答案 2 :(得分:1)
for file in *
do
[ "$file" = outfile.txt ] && continue
head -n 1 "$file"
grep -i '...' "$file"
done > outfile.txt
答案 3 :(得分:0)
嗨,好奇你可以在你的cmd中使用xargs。
find /mahesh -type f |xargs -I {} -t /bin/sh -c "head -1 {}>>/tmp/out.x|grep -i 6330162 {} >>/tmp/out.x"
其中/ mahesh是dir,你的文件在哪里,输出放在/tmp/out.x中
答案 4 :(得分:0)
我会这样做的:
@model login.Models.Home
@using(Html.BeginForm("Register","Home"))
{
<h1>Please Register</h1>
<p>
<label>Your First Name</label>
@Html.TextBoxFor(s=>s.FirstName)
@Html.ValidationMessageFor(s => s.FirstName)
</p>
<p>
<label>Your Last Name</label>
@Html.TextBoxFor(s=>s.LastName)
@Html.ValidationMessageFor(s => s.LastName)
</p>
<p>
<label>Your Email</label>
@Html.TextBoxFor(s=>s.Email)
@Html.ValidationMessageFor(s => s.Email)
</p>
<p>
<label>Your Password</label>
@Html.TextBoxFor(s=>s.Password)
@Html.ValidationMessageFor(s => s.Password)
</p>
<p>
<label>Confrim Password</label>
@Html.TextBoxFor(s=>s.PasswordConfirmation)
@Html.ValidationMessageFor(s => s.PasswordConfirmation)
</p>
<input type="submit" name="submit" value="Register!"/>
}
@if(!string.IsNullOrEmpty(ViewBag.message))
{
<p>@ViewBag.message</p>
}