Hot answers tagged

55

sed -n '10000000,10000020p' filename You might be able to speed that up a little like this: sed -n '10000000,10000020p; 10000021q' filename By the way, your command tail -n 10000000 filename | head 10 starts at the ten millionth line from the end of the file, while your "middle" command would seem to start at the ten millionth from the beginning ...


47

can't test right now, but ... | paste - - should do it


34

You can use nmap to run a ping scan. nmap -sP 192.168.254.* Starting Nmap 5.00 ( http://nmap.org ) at 2011-03-09 11:32 GMT Host xyzzy.lan (192.168.254.189) is up (0.00022s latency). MAC Address: 00:0C:29:5B:A5:E0 (VMware) Host plugh.lan (192.168.254.196) is up (0.00014s latency). MAC Address: 00:0C:29:2E:78:F1 (VMware) Host foo.lan (192.168.254.200) is up. ...


18

rename 's/ACDC/AC-DC/' *.xxx from man rename DESCRIPTION "rename" renames the filenames supplied according to the rule specified as the first argument. The perlexpr argument is a Perl expression which is expected to modify the $_ string in Perl for at least some of the filenames specified. If a given filename is not modified by the expression, ...


18

sed '5555,7777!d' <filename> This will print lines 5555-7777 of the file inclusively. Dennis Posted the following which I agree should be faster: sed '5555,7777p; 7778q' filename The following evidence that it should be faster: $ n=1 $ while [[ n -le 100000 ]]; do echo $n >> sedtest2; n=$((n + 1)); done $ strace -e trace=read -o sed1 sed ...


17

awk '{ if (length($0) < 16384) print }' yourfile >your_output_file.txt would print lines shorter than 16 kilobytes, as in your own example. Or if you fancy Perl: perl -nle 'if (length($_) < 16384) { print }' yourfile >your_output_file.txt


16

Use ps Output Formatting: ps -A -o pid Output formatting of the command is the best option. The o option controls the output formatting. I listed some of arguments below below, see 'man ps' for the rest ( to use multiple it would be -o pid,cmd,flags). KEY LONG DESCRIPTION c cmd simple name of executable C pcpu ...


15

This is where awk is the best tool. awk -F"[()]" '{print $2}' should pull out what's in parenthesis. Prints nothing if it's not there. So... $ who am i | awk -F"[()]" '{print $2}' www.example.com --Christopher Karel


15

Use nmap. Important to run it as root so you get the MAC addresses. Example: sudo nmap -sP 192.168.1.0/24 Will scan 192.168.1.1 - 192.168.1.255. Look up CIDR notation on wiki if you're not familiar with this subnet notation. You should be able to get nmap from the repos of any recentish Linux distro, e.g. sudo apt-get install nmap or sudo yum ...


15

Use sed -e "s/[[:space:]]\+/ /g" Here's an explanation: [ # start of character class [:space:] # The POSIX character class for whitespace characters. It's # functionally identical to [ \t\r\n\v\f] which matches a space, # tab, carriage return, newline, vertical tab, or form feed. See # ...


14

echo "121.122.121.111] other characters in logs from sendmail...." | sed 's/].*//' So if you have a file full of lines like that you can do sed 's/].*//' filename


14

I found out the following use of sed sed -n '10000000,+20p' filename Hope it's useful to someone!


14

Quitting when you're done can speed things up: sed -n '5555,7777p; 7778q' input_file


13

I would say that a much better/safer solution would be to restores those files from a clean backup.


12

I can only assume you were matching on the capital A in April and it no longer works because it's now May. Maybe instead of 'A' you should be using '^'.


11

What the heck people? "my whole site got hacked" = Nuke it from orbit and restore from backup. If you really want to, keep a backup copy and investigate it for evidence of how they got in and how to prevent the same thing from happening again. Do not run anything on the machine; get it offline as quick as possible.


11

Use awk as follows: $ echo '*EXTRA File 78223 C:\foo.pdf' | awk '$3 > 1048576 {print $0;}' $ echo '*EXTRA File 78223 C:\foo.pdf' | awk '$3 > 40000 {print $0;}' *EXTRA File 78223 C:\foo.pdf


10

To improve a little on @Iain's answer, I think you can do it in just one pass like this: #!/bin/sh sed -i '/<\/body/ { r /path/to/file a </body> d }' $1 This searches for </body>, inserts the file into the buffer, appends </body> to the buffer, and then deletes the original </body>, which as Iain correctly pointed ...


10

The different alternatives exist, not because each can do the same thing as the other (although this is true for localized cases, or for full programming languages such as Perl), but rather because they can do different things. sed is not very suitable for processing tabular data, and using pure bash for that is usually more pain than one would like. awk ...


10

find /directory -name '*.users' -exec sed -i -r '/^&?userb$/d' {} \;


10

I think this will split the line as you want sed -e 's/\]/\]\n/g' log | sed -e 's/^ *//g' | awk '/^\[/ {print}' First put a newline after each ] then remove any leading spaces and finally print the lines beginning with [. Your input line becomes [Wed Aug 08 11:39:41 2012] [error] [client 155.94.70.224] [line "271"] [id "960020"] [rev "2.2.5"] [msg ...


9

This one command will do what you want: grep -o '\[[^]]*\]' inputfile


9

Perl is (as always) your friend. I think this will do it: perl -n -mHTML::Entities -e ' ; print HTML::Entities::decode_entities($_) ;' E.g.: echo '"test" &amp; test $test ! test @ # $ % ^ &amp; *' |perl -n -mHTML::Entities -e ' ; print HTML::Entities::decode_entities($_) ;' With output: someguy@somehost ~]$ echo '"test" &amp; test $test ! ...


9

Since you haven't posted an error message I'm just making an educated guess here. Your script does this: # Set new password for user exec expect -f $0 ${1+"$@"} This calls expect with the full path to your script passed as the argument to expect's "-f" option...which means that expect will start executing from the top of your script, not from the "set" ...


9

#!/bin/bash while read user do read domain echo $user $domain done usage: cat file | scriptname


8

Check to make sure your Outlook isn't helpfully removing line breaks for you (ie the problem isn't Linux, it's Outlook). By default I think it does. It should be telling you this at the top of the view panel.


8

$ sed '/Z/s/x/0/g' <input_file>


8

How about cut instead: cat logfile | cut -d "]" -f1


7

I'm not sure why that doesn't work but this does: echo '[123]' | sed 's/\(\[\|\]\)//g' or this: echo '[123]' | sed -r 's/(\[|\])//g' You can also try a different approach and match the string inside the brackets (assuming the string can be matched easily and is not defined by the brackets): echo '[123]' | egrep -o "[0-9]+" I'm having the same ...


7

You can use the end-of-pattern-space pattern. The pattern $ matches the null string at the end of the pattern space. With this pattern you can avoid using rev as advised above. $ echo machine1a | sed 's/a$/b/' machine1b



Only top voted, non community-wiki answers of a minimum length are eligible