Printing grep results to file and terminal
The program you are looking for is "tee":
grep -n "$SEARCH_TERM" "$i" | tee -a /file.txt
How do I fetch lines before/after the grep result in bash?
You can use the -B
and -A
to print lines before and after the match.
grep -i -B 10 'error' data
Will print the 10 lines before the match, including the matching line itself.
How do I make grep output to a file?
This works here:
grep -i "other something" *.txt >> tables.txt
How do I get the dates of files in my output from a grep search?
The problem is that grep
is outputting the line that match your string, not the file name, so that in your second example your trying to call stat
on a string, not on a file!
You should add a -l
parameter to your grep
command in order to not output the matching line but the file that contains it. Try this:
grep -lrnw '/my_path/' -e 'search_string' | stat -c %n':'%z > list.txt
[EDIT] Anyway this would not work because the stat
command does not accept input from a pipe. The solution is then
stat -c %n':'%z $(grep -lrnw '/my_path/' -e 'search_string') > list.txt
grepping using the result of previous grep
You're almost there. But while xargs can sometimes be used to do what you want (depending on how the next command takes its arguments), you aren't actually using it to grep for the ID you just extracted. What you need to do is take the output of the first grep (containing the ID code) and use that in the next grep's expression. Something like:
grep "^ID `grep 'xyz occured' file.log | awk '{print $2}'` status code" file.log
Obviously another option would be to write a script to do this in one pass, a-la Ed's suggestion.
How to pipe output from grep to cp?
grep -l -r "TWL" --exclude=*.csv* | xargs cp -t ~/data/lidar/tmp-ajp2/
Explanation:
- grep
-l
option to output file names only - xargs to convert file list from the standard input to command line arguments
- cp
-t
option to specify target directory (and avoid using placeholders)
Pipe output with tee & grep into file but seeing full output
Then maybe not grep, you can use awk
instead:
cat file | awk '/aaa/{print >>"output.txt";}1'
How can I format my grep output to show line numbers at the end of the line, and also the hit count?
-n
returns line number.
-i
is for ignore-case. Only to be used if case matching is not necessary
$ grep -in null myfile.txt
2:example two null,
4:example four null,
Combine with awk
to print out the line number after the match:
$ grep -in null myfile.txt | awk -F: '{print $2" - Line number : "$1}'
example two null, - Line number : 2
example four null, - Line number : 4
Use command substitution to print out the total null count:
$ echo "Total null count :" $(grep -ic null myfile.txt)
Total null count : 2
How to grep and execute a command (for every match)
grep file foo | while read line ; do echo "$line" | date %s.%N ; done
More readably in a script:
grep file foo | while read line
do
echo "$line" | date %s.%N
done
For each line of input, read
will put the value into the variable $line
, and the while
statement will execute the loop body between do
and done
. Since the value is now in a variable and not stdin, I've used echo
to push it back into stdin, but you could just do date %s.%N "$line"
, assuming date works that way.
Avoid using for line in `grep file foo`
which is similar, because for
always breaks on spaces and this becomes a nightmare for reading lists of files:
find . -iname "*blah*.dat" | while read filename; do ....
would fail with for
.
Related Topics
What Really Is the "Linger Time" That Can Be Set with So_Linger on Sockets
Provide Password Using Shell Script
Docker Oci Runtime Create Failed: Container_Linux.Go:349: Starting Container Process Caused
Dbus_Bus_Request_Name (): Connections Are Not Allowed to Own the Service
How to Set Runpath of a Binary
How to Monitor Newly Created File in a Directory with Bash
The New Line Characted in the String Constant Isn't Being Recognized by Nasm
How to Get Environment Variables of Remote Host
Unterminated Address Regex While Using Sed
Cmake Set Environment Variable
Setting Up Jenkins Slave on MAC Os
Bash Script to Run a Constant Number of Jobs in the Background
How to Measure the Stack Size of a Process
Filename Last Modification Date Shell in Script
Use Sed to Delete Certain Lines Using an Index with the Line Numbers to Delete
Qt Version Is Not Properly Installed, Please Run Make Install