docker kill $(docker ps -q)
docker rm $(docker ps -a -q)
docker rmi $(docker images -q -f dangling=true)
docker rmi $(docker images -q)
git checkout -b myfeature develop
git checkout develop
git merge --no-ff myfeature
git branch -d myfeature
git push origin develop
git checkout -b release-1.2 develop
git commit -a -m "Bumped version number to 1.2"
git checkout master
git merge --no-ff release-1.2
git tag -a 1.2
git checkout develop
git merge --no-ff release-1.2
git branch -d release-1.2
git rm $(git ls-files --deleted)
git commit --amend
git add --partial
# git add -p
git gui
git grep <regexp> $(git rev-list --all)
# or
git rev-list --all | xargs git grep expression
git fetch --all
git reset --hard origin/master
git tag -d <tagname>
git push origin :refs/tags/<tagname>
git push origin --delete <branchName>
git branch --merged
git branch --no-merged
git log --since="yesterday" --pretty="oneline"
git stash
git stash apply
git diff --cached
git diff <commit-id>..<commit-id>
git diff <tag-name || branch-name> <file>
git archive <branch-name> --format=zip --output=<file>
git push -u origin feature_branch_name
git log --after="2015-11-13 00:00" --before="2015-11-16 23:59"
HANDY ONE-LINERS FOR SED (Unix stream editor) Apr. 26, 2004 compiled by Eric Pement - pemente[at]northpark[dot]edu version 5.4 Latest version of this file is usually at: http://sed.sourceforge.net/sed1line.txt http://www.student.northpark.edu/pemente/sed/sed1line.txt This file is also available in Portuguese at: http://www.lrv.ufsc.br/wmaker/sed_ptBR.html
FILE SPACING:
sed G
sed '/^$/d;G'
sed 'G;G'
sed 'n;d'
sed '/regex/{x;p;x;}'
sed '/regex/G'
sed '/regex/{x;p;x;G;}'
NUMBERING:
sed = filename | sed 'N;s/\n/\t/'
sed = filename | sed 'N; s/^/ /; s/ *(.{6,})\n/\1 /'
sed '/./=' filename | sed '/./N; s/\n/ /'
sed -n '$='
TEXT CONVERSION AND SUBSTITUTION:
sed 's/.$//' # assumes that all lines end with CR/LF sed 's/^M$//' # in bash/tcsh, press Ctrl-V then Ctrl-M sed 's/\x0D$//' # gsed 3.02.80, but top script is easier
sed "s/$/echo -e \\\r
/" # command line under ksh
sed 's/$'"/echo \\\r
/" # command line under bash
sed "s/$/echo \\\r
/" # command line under zsh
sed 's/$/\r/' # gsed 3.02.80
sed "s/$//" # method 1 sed -n p # method 2
sed "s/\r//" infile >outfile # UnxUtils sed v4.0.7 or higher tr -d \r outfile # GNU tr version 1.22 or higher
sed 's/^[ \t]*//' # see note on '\t' at end of file
sed 's/[ \t]*$//' # see note on '\t' at end of file
sed 's/^[ \t]//;s/[ \t]$//'
sed 's/^/ /'
sed -e :a -e 's/^.{1,78}$/ &/;ta' # set at 78 plus 1 space
sed -e :a -e 's/^.{1,77}$/ & /;ta' # method 1 sed -e :a -e 's/^.{1,77}$/ &/;ta' -e 's/( *)\1/\1/' # method 2
sed 's/foo/bar/' # replaces only 1st instance in a line sed 's/foo/bar/4' # replaces only 4th instance in a line sed 's/foo/bar/g' # replaces ALL instances in a line sed 's/(.*)foo(.foo)/\1bar\2/' # replace the next-to-last case sed 's/(.)foo/\1bar/' # replace only the last case
sed '/baz/s/foo/bar/g'
sed '/baz/!s/foo/bar/g'
sed 's/scarlet/red/g;s/ruby/red/g;s/puce/red/g' # most seds gsed 's/scarlet|ruby|puce/red/g' # GNU sed only
sed '1!G;h;$!d' # method 1 sed -n '1!G;h;$p' # method 2
sed '/\n/!G;s/(.)(.*\n)/&\2\1/;//D;s/.//'
sed '$!N;s/\n/ /'
sed -e :a -e '/\$/N; s/\\n//; ta'
sed -e :a -e '$!N;s/\n=/ /;ta' -e 'P;D'
gsed ':a;s/\B[0-9]{3}>/,&/;ta' # GNU sed sed -e :a -e 's/(.*[0-9])([0-9]{3})/\1,\2/;ta' # other seds
gsed ':a;s/(^|[^0-9.])([0-9]+)([0-9]{3})/\1\2,\3/g;ta'
gsed '0~5G' # GNU sed only sed 'n;n;n;n;G;' # other seds
SELECTIVE PRINTING OF CERTAIN LINES:
sed 10q
sed q
sed -e :a -e '$q;N;11,$D;ba'
sed '$!N;$!D'
sed '$!d' # method 1 sed -n '$p' # method 2
sed -n '/regexp/p' # method 1 sed '/regexp/!d' # method 2
sed -n '/regexp/!p' # method 1, corresponds to above sed '/regexp/d' # method 2, simpler syntax
sed -n '/regexp/{g;1!p;};h'
sed -n '/regexp/{n;p;}'
sed -n -e '/regexp/{=;x;1!p;g;$!N;p;D;}' -e h
sed '/AAA/!d; /BBB/!d; /CCC/!d'
sed '/AAA.*BBB.*CCC/!d'
sed -e '/AAA/b' -e '/BBB/b' -e '/CCC/b' -e d # most seds gsed '/AAA|BBB|CCC/!d' # GNU sed only
sed -e '/./{H;$!d;}' -e 'x;/AAA/!d;'
sed -e '/./{H;$!d;}' -e 'x;/AAA/!d;/BBB/!d;/CCC/!d'
sed -e '/./{H;$!d;}' -e 'x;/AAA/b' -e '/BBB/b' -e '/CCC/b' -e d gsed '/./{H;$!d;};x;/AAA|BBB|CCC/b;d' # GNU sed only
sed -n '/^.{65}/p'
sed -n '/^.{65}/!p' # method 1, corresponds to above sed '/^.{65}/d' # method 2, simpler syntax
sed -n '/regexp/,$p'
sed -n '8,12p' # method 1 sed '8,12!d' # method 2
sed -n '52p' # method 1 sed '52!d' # method 2 sed '52q;d' # method 3, efficient on large files
gsed -n '3~7p' # GNU sed only sed -n '3,${p;n;n;n;n;n;n;}' # other seds
sed -n '/Iowa/,/Montana/p' # case sensitive
SELECTIVE DELETION OF CERTAIN LINES:
sed '/Iowa/,/Montana/d'
sed '$!N; /^(.*)\n\1$/!P; D'
sed -n 'G; s/\n/&&/; /^([ -~]\n).\n\1/d; s/\n//; h; P'
sed '$!N; s/^(.*)\n\1$/\1/; t; D'
sed '1,10d'
sed '$d'
sed 'N;$!P;$!D;$d'
sed -e :a -e '$d;N;2,10ba' -e 'P;D' # method 1 sed -n -e :a -e '1,10!{P;N;D;};N;ba' # method 2
gsed '0~8d' # GNU sed only sed 'n;n;n;n;n;n;n;d;' # other seds
sed '/^$/d' # method 1 sed '/./!d' # method 2
sed '/./,/^$/!d' # method 1, allows 0 blanks at top, 1 at EOF sed '/^$/N;/\n$/D' # method 2, allows 1 blank at top, 0 at EOF
sed '/^$/N;/\n$/N;//D'
sed '/./,$!d'
sed -e :a -e '/^\n*$/{$d;N;ba' -e '}' # works on all seds sed -e :a -e '/^\n*$/N;/\n$/ba' # ditto, except for gsed 3.02*
sed -n '/^$/{p;h;};/./{x;/./p;}'
SPECIAL APPLICATIONS:
sed "s/.echo \\\b
//g" # double quotes required for Unix environment
sed 's/.^H//g' # in bash/tcsh, press Ctrl-V and then Ctrl-H
sed 's/.\x08//g' # hex expression for sed v1.5
sed '/^$/q' # deletes everything after first blank line
sed '1,/^$/d' # deletes everything up to first blank line
sed '/^Subject: */!d; s///;q'
sed '/^Reply-To:/q; /^From:/h; /./d;g;q'
sed 's/ (.)//; s/>.//; s/.[:<] *//'
sed 's/^/> /'
sed 's/^> //'
sed -e :a -e 's/<[^>]*>//g;/</N;//ba'
sed '/^end/,/^begin/d' file1 file2 ... fileX | uudecode # vers. 1 sed '/^end/,/^begin/d' "$@" | uudecode # vers. 2
echo @echo off >zipup.bat dir /b .txt | sed "s/^(.).TXT/pkzip -mo \1 \1.TXT/" >>zipup.bat
TYPICAL USE: Sed takes one or more editing commands and applies all of them, in sequence, to each line of input. After all the commands have been applied to the first input line, that line is output and a second input line is taken for processing, and the cycle repeats. The preceding examples assume that input comes from the standard input device (i.e, the console, normally this will be piped input). One or more filenames can be appended to the command line if the input does not come from stdin. Output is sent to stdout (the screen). Thus:
cat filename | sed '10q' # uses piped input sed '10q' filename # same effect, avoids a useless "cat" sed '10q' filename > newfile # redirects output to disk
For additional syntax instructions, including the way to apply editing commands from a disk file instead of the command line, consult "sed & awk, 2nd Edition," by Dale Dougherty and Arnold Robbins (O'Reilly, 1997; http://www.ora.com), "UNIX Text Processing," by Dale Dougherty and Tim O'Reilly (Hayden Books, 1987) or the tutorials by Mike Arst distributed in U-SEDIT2.ZIP (many sites). To fully exploit the power of sed, one must understand "regular expressions." For this, see "Mastering Regular Expressions" by Jeffrey Friedl (O'Reilly, 1997). The manual ("man") pages on Unix systems may be helpful (try "man sed", "man regexp", or the subsection on regular expressions in "man ed"), but man pages are notoriously difficult. They are not written to teach sed use or regexps to first-time users, but as a reference text for those already acquainted with these tools.
QUOTING SYNTAX: The preceding examples use single quotes ('...')
instead of double quotes ("...") to enclose editing commands, since
sed is typically used on a Unix platform. Single quotes prevent the
Unix shell from intrepreting the dollar sign ($) and backquotes
(...
), which are expanded by the shell if they are enclosed in
double quotes. Users of the "csh" shell and derivatives will also need
to quote the exclamation mark (!) with the backslash (i.e., !) to
properly run the examples listed above, even within single quotes.
Versions of sed written for DOS invariably require double quotes
("...") instead of single quotes to enclose editing commands.
USE OF '\t' IN SED SCRIPTS: For clarity in documentation, we have used the expression '\t' to indicate a tab character (0x09) in the scripts. However, most versions of sed do not recognize the '\t' abbreviation, so when typing these scripts from the command line, you should press the TAB key instead. '\t' is supported as a regular expression metacharacter in awk, perl, and HHsed, sedmod, and GNU sed v3.02.80.
VERSIONS OF SED: Versions of sed do differ, and some slight syntax variation is to be expected. In particular, most do not support the use of labels (:name) or branch instructions (b,t) within editing commands, except at the end of those commands. We have used the syntax which will be portable to most users of sed, even though the popular GNU versions of sed allow a more succinct syntax. When the reader sees a fairly long command such as this:
sed -e '/AAA/b' -e '/BBB/b' -e '/CCC/b' -e d
it is heartening to know that GNU sed will let you reduce it to:
sed '/AAA/b;/BBB/b;/CCC/b;d' # or even sed '/AAA|BBB|CCC/b;d'
In addition, remember that while many versions of sed accept a command like "/one/ s/RE1/RE2/", some do NOT allow "/one/! s/RE1/RE2/", which contains space before the 's'. Omit the space when typing the command.
OPTIMIZING FOR SPEED: If execution speed needs to be increased (due to large input files or slow processors or hard disks), substitution will be executed more quickly if the "find" expression is specified before giving the "s/.../.../" instruction. Thus:
sed 's/foo/bar/g' filename # standard replace command sed '/foo/ s/foo/bar/g' filename # executes more quickly sed '/foo/ s//bar/g' filename # shorthand sed syntax
On line selection or deletion in which you only need to output lines from the first part of the file, a "quit" command (q) in the script will drastically reduce processing time for large files. Thus:
sed -n '45,50p' filename # print line nos. 45-50 of a file sed -n '51q;45,50p' filename # same, but executes much faster
If you have any additional scripts to contribute or if you find errors in this document, please send e-mail to the compiler. Indicate the version of sed you used, the operating system it was compiled for, and the nature of the problem. Various scripts in this file were written or contributed by:
ag -G pattern searchterm
awk '{for (i=2; i<NF; i++) printf $i " "; print $NF}'
awk '{ $1=""; $2=""; $3=""; print $0 }'
awk -F '[0-9][0-9]' '{print $2}'
awk '!NF || !seen[$0]++'
awk ' { t = $1; $1 = $2; $2 = t; print; } ' input_file
cut -c 4-
diff <(sort file_a) <(sort file_b)
less +F
<h>
sed '/<pattern>/d'
sed 's/<pattern>//g'
sed -n '5,10p' <filename>
sed 's/^[ \t]*//'
sed 's/[ \t]*$//'
sed 's/^[ \t]*//;s/[ \t]*$//'
sed '/.\{16\}/d'
sed -n '/regexp/p' # method 1 sed '/regexp/!d' # method 2
sed -n '/regexp/!p' # method 1, corresponds to above sed '/regexp/d' # method 2, simpler syntax
sed 's/foo/bar/' # replaces only 1st instance in a line sed 's/foo/bar/4' # replaces only 4th instance in a line sed 's/foo/bar/g' # replaces ALL instances in a line sed 's/(.*)foo(.foo)/\1bar\2/' # replace the next-to-last case sed 's/(.)foo/\1bar/' # replace only the last case
sed '/baz/s/foo/bar/g'
sed '/baz/!s/foo/bar/g'
sed 's/scarlet/red/g;s/ruby/red/g;s/puce/red/g' # most seds gsed 's/scarlet|ruby|puce/red/g' # GNU sed only
sed '1!G;h;$!d' # method 1 sed -n '1!G;h;$p' # method 2
sed '/\n/!G;s/(.)(.*\n)/&\2\1/;//D;s/.//'
sed '$!N;s/\n/ /'
sed -e :a -e '/\$/N; s/\\n//; ta'
gsed ':a;s/\B[0-9]{3}>/,&/;ta' # GNU sed sed -e :a -e 's/(.*[0-9])([0-9]{3})/\1,\2/;ta' # other seds
gsed ':a;s/(^|[^0-9.])([0-9]+)([0-9]{3})/\1\2,\3/g;ta'
sed -e 's/^[ \t]*//'
sed 's/[ \t]*$//'
sed 's/^[ \t]*//;s/[ \t]*$//'
tail -r
tail +2
grep -o "needle" file | wc -l
#!/usr/bin/env bash
sh -e
cat <<LimitString
foo
bar
baz
LimitString
(cd /tmp && ls)
~~cat filename | sort~~
sort < filename
mkdir /home/foo/doc/bar && cd $_
for file in *; do
mv $file prefix_${file%%}
done
item_in () {
local item
for item in "${@:2}"; do [[ "$item" == "$1" ]] && return 0; done
return 1
}
# $ array=("something to search for" "a string" "test2000")
# $ item_in "a string" "${array[@]}"
# $ echo $?
# 0
# $ containsElement "foo" "${array[@]}"
# $ echo $?
# 1
for file in *; do mv $file ${file/-/_} ; done
n=42
char="-"
spacer=$(head -c $n < /dev/zero | tr '\0' "$char")
cmd | function |
---|---|
prog > file | send stdout to file |
prog 2> file | send stderr to file |
prog > file 2>&1 | send stdout and stderr to file |
prog < file | take stdin from file |
prog >> file | send stdout to end of file |
prog 2>> file | send stderr to end of file |
prog >> file 2>&1 | send stdout and stderr to end fo file |
prog <<c | read stdin from keyboard until c |
prog | prog2 | pipe stdout to prog2 |
prog 2>&1 | prog2 | pipe stdout and stderr to prog2 |
> /dev/null 2>&1
2> /dev/null
&> /dev/null
<ctrl-z>
gcc program.c -o program &
jobs
fg %1
kill %1
escape . ....................last param of the last command (repeat)
ctrl u [...] ctrl y .........type partial command, kill this command, check something you forgot, yank the command, resume typing
alt . .......................insert previous command argument
alt a .......................multiselect in menu complete
alt <arrow-left> ............move a word backward
alt <arrow-right> ...........move a word forward
cmd <del> ...................delete the word left of the cursor
cmd <arrow-left> ............move to the beginning of the line
cmd <arrow-right> ...........move to the end of the line
cmd <arrow-down> ............delete the whole line
ctrl x ......................delete the char under the cursor
ctrl w ......................delete the word under the cursor
alt <arrow-up> ..............cd ..
ctr l .......................ls -laH
<arrow-up> ..................history substring search backward
<arrow-down> ................history substring search forward
<ctrl-z> ....................suspend job to background
ls **/**
ls -l zsh_demo/**/*<1-10>.txt
ls -l zsh_demo/**/[a]*.txt
ls -l zsh_demo/**/(ab|bc)*.txt
ls -l zsh_demo/**/[^cC]*.txt
print -l zsh_demo/**/*(/)
print -l zsh_demo/**/*(.)
ls -l zsh_demo/**/*(L0)
ls -l zsh_demo/**/*(Lk+3)
print -l zsh_demo/**/*(mh-1)
ls -l zsh_demo/**/*(om[1,3])
git diff ./file_1.py
git add !:2<TAB> # expands to git add ./file_1.py
!! # last command
!$ # last parameter of the last command
!* # all parameters
#!/bin/bash
for i in "$@"
do
case $i in
-e=*|--extension=*)
EXTENSION="${i#*=}"
shift # past argument=value
;;
-s=*|--searchpath=*)
SEARCHPATH="${i#*=}"
shift # past argument=value
;;
-l=*|--lib=*)
LIBPATH="${i#*=}"
shift # past argument=value
;;
--default)
DEFAULT=YES
shift # past argument with no value
;;
*)
# unknown option
;;
esac
done
#!/bin/bash
# Use -gt 1 to consume two arguments per pass in the loop (e.g. each
# argument has a corresponding value to go with it).
# Use -gt 0 to consume one or more arguments per pass in the loop (e.g.
# some arguments don't have a corresponding value to go with it such
# as in the --default example).
# note: if this is set to -gt 0 the /etc/hosts part is not recognized ( may be a bug )
while [[ $# -gt 1 ]]
do
key="$1"
case $key in
-e|--extension)
EXTENSION="$2"
shift # past argument
;;
-s|--searchpath)
SEARCHPATH="$2"
shift # past argument
;;
-l|--lib)
LIBPATH="$2"
shift # past argument
;;
--default)
DEFAULT=YES
;;
*)
# unknown option
;;
esac
shift # past argument or value
done
files=(/var/logs/foo*.log)
for ((i=${#files[@]}-1; i>=0; i--)); do
bar "${files[$i]}"
done
open -a /Applications/Whatever.app
mdutil -i off /Volumes/VolumeName
spotlight $file
spotlight_comment $file
pfs
cdf
quick-look $file
eject