Sunday, November 23, 2008

linux:shell: /bin/tar: Argument list too long

When you create a tar archive and have an error: /bin/tar: Argument list too long, then you could try an argument of tar:

-T or --files-from=F

(which allows you to get names to extract or create from file F).

Wednesday, November 12, 2008

linux:shell: broken 'while' loop

When I do a while loop in which there is a command 'ssh', the while loop just goes only one iteration and quits. The problem is from 'ssh' read stdin so that 'while' cannot read anymore and stop afterwards, for example,

while read CompName
do
ssh $CompName 'ls'
echo "Done"
done <>

In the example, only one iteration is conducted (including the echo line). The solutions are provided by google searching. One is general one, I think. 1) Redirect ssh stdin by

< /dev/null ssh $CompName 'ls'

2) ssh-specified trick: use '-n':

ssh -n $CompName 'ls'

Saturday, November 8, 2008

linux:shell:bash:grep: multi-grep

If I want to search multi words by grep, I could do in the way:

egrep "a|b|c|d" my_input_file.txt

then egrep will help you to search OR of a, b, c and d. If searching for AND of multi-words, you can do by pipe:

grep a my_input_file.txt |grep b |grep c |grep d

. However, sometimes, it is not so easy to use pipe in one line for the above usage. You can always build string of the command first and evaluate it. For example,

cmd="grep $var1 my_input_file.txt|grep $var2"
...
cmd="$cmd |grep $var3"
...
eval $cmd

Linux:shell: awk: multiple separators

'awk' is a very useful shell command (also a program language) in linux (unix). You split one text line by it. For example, for the line

line="aa, b c , d , f "

what you can do in shell command (bash) is

echo $line|awk -F "," '{print $1 $2 $3 $4}' # to get different columns separated by ","

However, if you wanna split one line with multi-separators, then you could do in the way, for example,

$ line="aa, bb_ ccd: ee"
$ echo $line |awk -F ",|_|:" '{print $1$2$3}'

Note here "|" will do logic "OR" of all separators. This is similar 'egrep'. If you want to grep multi key words, then you could do in the same way (which has been addressed in my other blog, just search grep ).

Locations of visitors to this page