조개껍질로 이거 어떻게 해?자신의 비망록이 되다

24519 단어 shelltech

개시하다


쉽게 잊어버리기 때문에 조개껍질로 이렇게 하고 싶어요.총괄해 보다.
뭔가 있으면 적당히 추가될 수도 있어.

awk에서 싱글 쿼터, 더블 쿼터 처리


참고했던 기사지만 보자마자 바로 이해가 안 돼요.
분해하면서 생각하다
https://orebibou.com/ja/home/201703/20170303_002/

두 개의 쿼터로 동그라미를 치다


참고로 awk의 print () 는 () 자체를 생략할 수 있습니다
$ cat amaimono.txt | awk '{print $1}'
apple
banana
choco

$ cat amaimono.txt | awk '{print($1)}'
apple
banana
choco

"에 설정된 문자열 처리(변수로 전개되지 않음)
$ cat amaimono.txt | awk '{print "$1"}'
$1
$1
$1

"를 문자열로 처리하려고 "포위하면서 \탈출"\""  →  "
$ cat amaimono.txt | awk '{print "\"" $1}'
"apple
"banana
"choco
처음과 끝을 각각 둘러싸면 이렇게 됩니다.
$ cat amaimono.txt | awk '{print "\"" $1 "\""}'
"apple"
"banana"
"choco"

awk로 홀로그램 가방으로.


단과탈의 상황은 좀 복잡하다.
$ cat amaimono.txt | awk '{print "'\''" $1 }' 
'apple
'banana
'choco
문자열로 처리하고 싶어서 " 포위와 동시에 단과트 포위'\''로 피한 단과트.
awk에 맡긴 프로그램 text 자체가 싱글 쿼터에 둘러싸여 있기 때문\'만 해도 프로그램 text를 둘러싼 싱글 쿼터로 여겨진다.
따라서 프로그램 자체를 따옴표로 잠시 둘러싸고 문자로 쓴 따옴표를 피한 다음에 프로그램의 후속을 쓰기 위해 쓴 따옴표를 써야 한다"'\''"'
$ cat amaimono.txt | awk '{print "'\''" $1 "'\''"}'
'apple'
'banana'
'choco'

awk 출력에서 쉼표로 구분하기


OFS를 지정합니다.
$ echo "a b c" | awk 'BEGIN{OFS=","} {print $1, $2, $3}'
 a,b,c
{print}라면 {print $0}로 해석되기 때문에 OFS가 유효하지 않다.
참조:
https://ebc-2in2crc.hatenablog.jp/entry/2021/06/13/165226

awk에서 입력한 구분자를 공백 이외의 문자로 설정하기 바랍니다


FS 지정 또는 -F 옵션 사용
 cat test2 
ばなな,100
りんご,120
ぶどう,200

$ cat test2  | awk -F, '{print $1}'
ばなな
りんご
ぶどう

$ cat test2  | awk 'BEGIN{FS=","} {print $1}'
ばなな
りんご
ぶどう
cut 명령어도 사용 가능
$ cat test2 | cut -d, -f1
ばなな
りんご
ぶどう

리디렉션 및 파이프

  • >: 표준 출력을 지정한 파일에 씁니다(파일이 없으면 새로 만듭니다. 파일이 있으면 0바이트로 설정하고 덮어씁니다).
  • zsh의 경우 기본적으로 덮어쓰기를 방지합니다.질의응답 없이 덮어쓰려는 경우 >|에서 지정합니다.
  •  $ echo "d e f" > hogefile
     zsh: file exists: hogefile
     $ echo "d e f" >| hogefile
     $  cat hogefile
     d e f
    
  • >>: 표준 출력을 지정한 파일에 씁니다(파일이 없으면 새로 만듭니다. 파일이 있으면 추적)
  • 2>>: 표준 오류를 지정한 파일에 씁니다(파일이 없으면 새로 만듭니다. 파일이 있으면 추적)
  • <: 표준 입력을 지정합니다.파일이 아니더라도 명령 결과를 전송할 수 있음
  • cut -d" " -f 1 <(ls -lt)
    合計
    -rw-rw-r--
    -rw-rw-r--
    -rw-rw-r--
    
    # 以下コマンドと一緒
    ls -lt | cut -d" " -f 
    
  • &>: 표준 및 표준 오류 출력을 지정된 파일에 씁니다(파일이 없으면 새로 만듭니다.파일이 있으면 0바이트로 설정하고 덮어씁니다.)
  • aws s3 cp s3://hoge hoge &> /dev/null
    
  • |&: 표준 출력, 표준 오류 출력을 다음 명령의 표준 입력으로 설정합니다.2>&1 | 와 함께
  • 1>&2: 표준 출력을 표준 오류와 같은 출력 목적지로 변경
  • 2>&1: 표준 오류 출력을 표준 출력과 같은 출력 목적지로 변경
  • xargs


    많이 잊어버리기 쉬우니까.
    $ cat << FIN | xargs -I{} sh -c 'echo hello {}'
    > Alice
    > Bob
    > Cathy
    > FIN
    
    hello Alice
    hello Bob
    hello Cathy
    
    

  • I : replace-str.옵션 뒤에 지정한 문자열을 표준 입력에서 받은 값으로 바꾸기

  • sh-c<문자열>: 지정된 문자열을 실행하는 명령
  • 이하 결과는 같다
    $ echo alice
    alice
    $ sh -c 'echo alice'
    alice
    
    일련의 파이프 명령을 xargs에 전달하려면sh-c<문자열>을 통해 실행합니다.
    xargs 다음에 명령을 지정하지만, 아무것도 지정하지 않으면 echo 명령을 사용합니다.
    ※ -p를 지정하면 xargs가 수행할 명령을 확인할 수 있습니다.
    참조:
    https://atmarkit.itmedia.co.jp/ait/articles/1801/19/news014.html#sample2
    $ cat << FIN | xargs -I{} -p sh -c 'echo hello {}'
    pipe heredoc> Alice
    pipe heredoc> Bob
    pipe heredoc> Cathy
    pipe heredoc> FIN
    
    sh -c 'echo hello Alice' ?...
    sh -c 'echo hello Bob' ?...
    sh -c 'echo hello Cathy' ?...
    

    특정 문자열과 일치하는 문자 가져오기


    grep -rho 'hoge' ./* --exclude=fuga
    
  • r: 귀속
  • h: 검색 결과에서 파일 이름 제외
  • o:--only-matching.일치하는 문자열만 추출
  • l: 파일 이름만 나열
  • -- exclude: 지정된 파일 제외
  • 여러 문자열 검색


    and 조건으로 검색하면 파이프로 가장 빨리 연결됩니다.
    grep hoge in.txt | grep moga
    
    or 조건이라면 -e 연결 조건으로
    grep -e hoge -e fuga in.txt
    

    많은 문자열 중 하나와 일치하는지 검색


    양이 많은 경우(종사자 목록에서 ID로 검색하려는 등) 파이프로 연결할 수 없더라도 검색하고자 하는 문자열을 파일에 열거해서-f 옵션으로 지정할 수 있다.
    $ cat test                
    ばなな 100
    りんご 120
    ぶどう 200
    
    $ cat pattern.txt 
    100
    ばなな
    200
    
    # 1行目は、ばななと100に一致している
    $ grep -f pattern.txt test
    ばなな 100
    ぶどう 200
    
    참조:
    https://it-ojisan.tokyo/grep-f/

    한 번에 대용량 파일 교체


    awk로 특정 파일 이름으로 변경된 케이스 명령을 조립하여 표준 입력을 통해sh에 전달합니다.
    참조:
    http://pixelbeat.jp/rename-bunch-of-files-with-oneline-command/
    $ ls hoge.*
    hoge.json  hoge.swp  hoge.txt
    
    # コマンドを組み立て
    $ ls hoge.* | awk -F"." '{print "mv "$0" moge."$2}'
    mv hoge.json moge.json
    mv hoge.swp moge.swp
    mv hoge.txt moge.txt
    
    # 組み立てコマンドを実行する
    $ ls hoge.* | awk -F"." '{print "mv "$0" moge."$2}' | bash
    $ ls moge.*
    moge.json  moge.swp  moge.txt
    
    

    uid 생성


    $ uuidgen 
    e283483f-7638-4af4-92f3-7a97be2e6081
    

    표준 오류 출력을 로그에 쓰기


    exec 명령을 사용하면 이 과정의 표준 오류 출력이 지정한 파일에 기록됩니다.(스크립트를 쓸 때 가장 먼저 쓰기)
    exec 2> /var/tmp/logfile
    
    일괄 처리에서 tmp 데이터에 중도 처리 파일을 출력하고 로그를 통해 내용을 확인하고자 하는 경우
    상기 exec와 조합하는 동시에cat로 출력하는 표준 오류가 있으면 로그를 쓸 수 있습니다.
    cat ${tmp}-data_log 1>&2
    

    매개변수를 사용한 후


    function이나 스크립트에서 전달된 매개 변수는 $1, $2,... 얻을 수 있지만, N 번째 이후의 매개 변수를 찾으려면 ${@: N}
    $ function args_test() {                 
    function> echo "引数すべて: $@"
    function> echo "引数1個目: $1"
    function> echo "引数3個目以降:${@:3}"
    function> }
    
    $ args_test a b c d e   
    引数すべて: a b c d e
    引数1個目: a
    引数3個目以降:c d e
    

    실행 조작


    xargs를 사용합니다.

    여러 줄을 한 줄로 합치다


     % cat test 
    ばなな 100
    りんご 120
    ぶどう 200
    
     % cat test| xargs
    ばなな 100 りんご 120 ぶどう 200
    

    행마다 한 줄을 총결산하다

    xargs -L数字에서 각 지정된 행을 한 행으로 요약
     % cat test2
    Aさん
    1/1うまれ
    男
    Bさん
    2/1生まれ
    女
    Cさん
    3/1生まれ
    男
    
    # 3行ごとに1行にまとめる(1行は3列になる)
    % cat test2 | xargs -L3
    Aさん 1/1うまれ 男
    Bさん 2/1生まれ 女
    Cさん 3/1生まれ 男
    

    다열을 일렬로 열거하다

    xargs -n数字에서 지정-n, --max-argsxargs에서 지정한 명령을 실행할 때의 매개 변수 상한선입니다.
    참조:
    https://atmarkit.itmedia.co.jp/ait/articles/1801/19/news014.html#opt
     % cat test 
    ばなな 100
    りんご 120
    ぶどう 200
    
    # 1
    % cat test | xargs -n1
    ばなな
    100
    りんご
    120
    ぶどう
    200
    
    또는tr명령을 사용하여 줄 바꾸기를 삭제합니다(마지막 줄 바꾸기도 없습니다).
    $ cat test |  tr -d '\n'
    ばなな 100りんご 120ぶどう 200
    

    이전 매개변수 작업

    $_ 이전 명령의 마지막 매개 변수를 저장하는 특수 변수
    cat이나vils의생각,cd의mkdir의생각에사용
    $ ls tmp-file
    tmp-file
    $ echo $_
    tmp-file
    
    $ mkdir hoge ; cd $_
    

    파일의 일부를 수정하고 덮어쓰기


    $ cat memo
    りんご 100
    ばなな 200
    オレンジ 300
    
    $ cat memo | sed 's/オレンジ/グレープ/' > memo_edit
    $ cat memo_edit
    りんご 100
    ばなな 200
    グレープ 300
    
    $ mv memo_edit memo
    

    확인 단계를 건너뛰면sed의 i 옵션으로 덮어쓸 수 있습니다


    $ sed -i 's/オレンジ/グレープ/' memo
    $ cat memo
    りんご 100
    ばなな 200
    グレープ 300
    

    ○ 줄별 파일 분할


    split 명령을 사용합니다.
    -l로 분할된 행 수를 지정할 수 있습니다.
    split -l 3 -d ファイル名 [分割後のファイル名のprefix]
    
    참조:
    https://atmarkit.itmedia.co.jp/ait/articles/1711/24/news016.html

    빈 줄 삭제


    sed '/^$/d'
    

    seq 명령


    seq10이면 1부터 10까지의 순서입니다.
    한 걸음 두 번 진행하고 싶은 경우 시작, 증가 값, 끝의 3가지 값을 지정합니다
    두 덩어리
    $ seq 2 2 10
    2
    4
    6
    8
    10
    

    seq 명령 형식

    -f 문자열에 연결 가능
    $ seq -f 'user_%g' 1 10
    user_1
    user_2
    user_3
    user_4
    user_5
    user_6
    user_7
    user_8
    user_9
    user_10
    
    형식%02g 등으로 0 을 채울 수 있음
    $ seq -f 'user_%02g' 1 5
    user_01
    user_02
    user_03
    user_04
    user_05
    

    확인 문자열


    hoge="hoge"
    # -n で改行コードを無くさないと駄目
    echo -n ${hoge} | wc -m
    
    # もしくは
    echo ${#hoge}
    
    참조:
    https://qiita.com/jun68ykt/items/3095b63cde309aff974d

    표시할 텍스트의 폭 조정


    축소를 잘 조정하고 싶어요.
    $ cat amaimono.txt 
    商品 金額 在庫数
    apple 10 100
    banana 200 30
    choco 300 99999
    
    $ cat amaimono.txt | column -t
    商品    金額  在庫数
    apple   10    100
    banana  200   30
    choco   300   99999
    
    쉼표 분할의 경우 경계를 지정해야 함
     cat amaimono.csv | column -t
    商品,金額,在庫数
    apple,10,100
    banana,200,30
    choco,300,99999
    
    
    $ cat amaimono.csv | column -t -s, 
    商品    金額  在庫数
    apple   10    100
    banana  200   30
    choco   300   99999
    

    많은 문자 생성


    동일 문자 생성

    브레이크가 확장될 때 동일한 문자 생성


    hoge 뒤에 공백이 추가되었습니다.
    10개를 생성하려면 9개,가 필요합니다.
    $ echo hoge{,,,,,,,,,}                    
    hoge hoge hoge hoge hoge hoge hoge hoge hoge hoge
    

    명령은 같은 문자를 생성합니다


    아마 가장 잽싸다
    $ yes hoge | head -n 10
    hoge
    hoge
    hoge
    hoge
    hoge
    hoge
    hoge
    hoge
    hoge
    hoge
    
    yes [文字列]에서'yes'대신 지정한 문자열을 반복해서 열거합니다.
    이렇게 하면 Ctrl+C가 강제로 끝나지 않으면 멈출 수 없기 때문에 헤드가 원하는 양으로 뽑아야 합니다.
    참조:
    https://webkaru.net/linux/yes-command/

    좋은 웹페이지 즐겨찾기