sed
# Replace all sed -i "" "s|pattern|replace|g" "file.ext" # osx sed -i"" "s|pattern|replace|g" "file.ext" # linux # Replace the first line string sed -i "" "1s|pattern|replace|g" "file.ext" # osx sed -i"" "1s|pattern|replace|g" "file.ext" # linux # Replace with \t sed -i "" $'1s|pattern|\t|g' "file.ext" # osx sed -i"" $'1s|pattern|\t|g' "file.ext" # linux
rm -rf !("Except 1"|"Except 2"|"Except N")
#!/bin/bash if [ "foo" = "foo" ]; then echo expression evaluated as true else echo expression evaluated as false fi # or #!/bin/bash if [[ "foo" == "foo" ]]; then echo expression evaluated as true else echo expression evaluated as false fi
# osx stat -f "%Sm" -t "%Y%m%dT%H%M%S" filename # datetime stat -f "%Sm" -t "%s" filename # timestamp in seconds # linux stat -c %y filename # datetime stat -c %Y filename # timestamp in seconds
# Datetime echo `date '+%Y-%m-%d %H:%M:%S.%N'` # Timestamp in seconds echo `date '+%s'` # Elapsed time STARTs=`date '+%s'` STARTn=`date '+%N' | sed 's/^0*//'` echo "Do something" ENDs=`date '+%s'` ENDn=`date '+%N' | sed 's/^0*//'` SECS=$(($ENDs - $STARTs)) NANO=$(($ENDn - $STARTn)) if (( $NANO < 0 )); then NANO=$((1000000000 + $NANO)) SECS=$(($SECS - 1)) fi echo "Cost $SECS.$NANO seconds."
if [[ "$OSTYPE" == "linux-gnu" ]]; then # ... elif [[ "$OSTYPE" == "darwin"* ]]; then # Mac OSX elif [[ "$OSTYPE" == "cygwin" ]]; then # POSIX compatibility layer and Linux environment emulation for Windows elif [[ "$OSTYPE" == "msys" ]]; then # Lightweight shell and GNU utilities compiled for Windows (part of MinGW) elif [[ "$OSTYPE" == "win32" ]]; then # I'm not sure this can happen. elif [[ "$OSTYPE" == "freebsd"* ]]; then # ... else # Unknown. fi
content="" while read line do content="${content}\n${line}" done < "${1:-/dev/stdin}" echo $content #or file=${1--} content=$(cat $file) echo $content
The substitution ${1:-...}
takes $1
if defined,
otherwise the file name of the standard input of the own process is used.linux
# Define a function myfunc() { return 1 } # Call the function myfunc # Get the result from the last command, # here is the result of `myfunc` result=$?
for string in $list; do unique[$string]=1; done echo ${!unique[@]}
# entire file content=`cat filename.txt` echo $content # read line by line while IFS='' read -r line || [[ -n "$line" ]]; do echo "Text read from file: $line" done < filename.txt
n=1 for i in $(ls | sort -n); do newfile=$(printf "%03d%s" $n .${i##*.}) mv "${i}" "${newfile}" echo "${i} -> ${newfile}" ((++n)) done
printf "%05d\n" 52
original="Hello World" world="${original:6}" hell="${original::4}" hello="${original::-6}" lo_wo="${original:3:-3}"
# For loop for (( i=0; i<10; i++ )); do echo "$i"; done # For loop range # {START..END..INCREMENT} for i in {1..10..2}; do echo "$i"; done # For loop through files with spaces for i in *; do echo "$i"; done; for i in *.ext; do echo "$i"; done; # For loop through ls results only show extension for i in $(ls); do echo "${i##*.}"; done; # For loop through ls results only show filename for i in $(ls); do echo "${i%.*}"; done; # For loop through ls results sort as numeric for i in $(ls | sort -n); do echo "$i"; done;
ls | sort -n
for i in *.ext; do mv "$i" "${i%.ext}.newext"; done
sudo chown -R root:wheel [file|dir]
# lock chflags -R uchg * # unlock chflags -R nouchg *
svn status --no-ignore | grep '^\?' | sed 's/^\? //' svn status --no-ignore | grep '^\?' | sed 's/^\? //' | xargs -Ixx rm -rf xx
# Find and delete empty folders find . -type d -empty -delete # Find over 100MB files and sort find / -type f -size +100M -exec ls -lh {} \; | sort -n -r # Find files between the specified dates and copy them to the specified folder find . -type f -newermt '2018-05-25' ! -newermt '2018-05-26' | xargs -I {} cp {} "folder/"