CLASSPATH= for name in `ls lib/*.jar`; do CLASSPATH="${CLASSPATH}:$name" done echo ${CLASSPATH}
- 重複削除
#!/bin/bash numLine=0 cat work.log | while read line do numLine=$((numLine + 1)) if [ `expr $numLine % 2` == 0 ]; then echo $line fi done
- ループしてファイル処理
#!/bin/bash for DIR in `ls` do cd ${DIR} for FILE in `ls` do cat ${FILE} | while IFS= read -r line || [ -n "$line" ]; do if [[ $line == " <type>REPOSITORY</type>" ]]; then echo "$line" >> ${FILE}.new echo " <namespace>"${DIR}"</namespace>" >> ${FILE}.new else echo "$line" >> ${FILE}.new fi done mv ${FILE}.new ${FILE} done cd .. done echo "convert finished"
- ファイルに書いてないディレクトリを削除する
#!/usr/bin/bash FILE=/xxx/examples.txt cd kogito-examples for DIR in `ls` do EXISTS=0 while IFS= read -r line || [ -n "$line" ]; do if [[ ${DIR} = ${line} ]]; then echo "hit ${DIR}" EXISTS=1 fi done < <(cat ${FILE}) if [[ ${EXISTS} = 0 ]] && [[ -d ${DIR} ]]; then echo "not hit ${DIR}" rm -rf ${DIR} fi done echo "finished"
- ~/.2/repository から特定のバージョン全部削除
findg 7.50.0.Final | xargs rm
- ファイルにコード挿入とか
#!/bin/bash FILE=$1 if [ ! -f ./$FILE ]; then echo "The file doesn't exist!" exit fi CLASSNAME=${FILE:0:-5} result=`grep -n "public class " $FILE` marker=`echo $result | awk -F':' '{print $1}'` echo $marker count=0 echo -n > $FILE.new cat ${FILE} | while IFS= read -r line || [ -n "$line" ]; do count=$((count + 1)) if [[ $count == $(($marker-1)) ]]; then echo "$line" >> ${FILE}.new echo "@RunWith(Parameterized.class)" >> ${FILE}.new elif [[ $count == $(($marker+1)) ]]; then echo "" >> ${FILE}.new echo " private final KieBaseTestConfiguration kieBaseTestConfiguration;" >> ${FILE}.new echo "" >> ${FILE}.new echo " public $CLASSNAME(final KieBaseTestConfiguration kieBaseTestConfiguration) {" >> ${FILE}.new echo " this.kieBaseTestConfiguration = kieBaseTestConfiguration;" >> ${FILE}.new echo " }" >> ${FILE}.new echo "" >> ${FILE}.new echo " @Parameterized.Parameters(name = \"KieBase type={0}\")" >> ${FILE}.new echo " public static Collection<Object[]> getParameters() {" >> ${FILE}.new echo " return TestParametersUtil.getKieBaseCloudConfigurations(true);" >> ${FILE}.new echo " }" >> ${FILE}.new echo "$line" >> ${FILE}.new else echo "$line" >> ${FILE}.new fi done mv ${FILE}.new ${FILE}
- 単語を時間帯毎にカウント
grep "login for:" server.log_cm* | sort | awk '{print $2}' | awk -F: '{print $1":"$2}' | sort | uniq -c
- 複数ログを grep してファイル名を無視してソート
find . | grep server.log | xargs grep "Added user" | awk '{print $2 " " $3 " " $4 " " $5 " " $6 " " $7 " " $8 " " $9}' | sort
- Full GC 後の footprint を見る
grep Full gc.log | grep -v Ergonomics | awk -F'[>(]' '{print $8}'
とか
grep Full gc.log | grep -v "Metadata GC Threshold" | awk -F' ' '{print $10}' | awk -F'[>(]' '{print $2}'
TODO: Ergonomics と System.gc と Metadata GC Threshold に全部対応するやつ
awk -F'\\[|\\]' '{print $4,$6}'
- ファイルをリスト、あとで diff
ls -l | awk '{print $9}' > list.txt
ls -l | awk '{print $9}' | sed -e 's/\(.*\)-6.0.*jar/\1/' > list.txt
sed
- 後方参照
- cat xxx.txt | sed -e 's/<.*>\(.*\)<.*>/\1/g'
- 直接編集&バックアップ(-i[SUFFIX])
- タイムスタンプから ,XXX000000 を削る
sed s/,...000000//g
- 複数ファイルを置換編集
find . -name *.java | xargs sed -i 's/org.kie.addons.monitoring/org.kie.kogito.monitoring/'
cat と 標準入力組み合わせ
echo "xxx" | cat - test.txt
grep でヒットした行の周りの複数行も見たい
find . | grep pom.xml | xargs grep -2 drools-mvel 2>/dev/null