2019年2月17日日曜日

【LinuC】grepコマンド 正規表現

grepコマンドは、検索範囲から文字列を検索するコマンドです。

通常の検索
$grep aaa bbb.txt
⇒bbb.txt の中から「aaa」という文字列が入っている行を検索する。

正規表現を使った検索
$grep '^a' bbb.txt
⇒bbb.txt の中から先頭の文字が「a」から始まる行を検索する。

他にも以下のようなメタキャラクタもあり使用することができます。

.             任意の文字に一致
^    行の先頭
$    行の末尾
*    直前の文字が0回以上の繰り返しに一致
?    直前の文字が0回もしくは1回の繰り返しに一致(拡張正規表現)
+    直前の文字が1回以上の繰り返しに一致(拡張正規表現)
[abAB]  a,b,A,Bいずれかの文字
[^abAB] a,b,A,B以外のいずれかの文字
[a-dA-D] a,b,c,d,A,B,C,Dいずれかの文字
\x            メタキャラクタを文字列として扱う(xがメタキャラクタの時)

※拡張正規表現を使う場合はgrepに-Eのオプションが必要。

■使用例
$grep '.' file.txt
⇒空白行以外をすべて表示する。

$grep '\.' file.txt
⇒ピリオドを含むすべての行を表示する。

$grep '[Ll]inux' file.txt
⇒Linix,linuxのいずれかを含む行をすべて表示する。

$grep '^[^0-9]' file.txt
⇒先頭の1文字が数値以外の行をすべて表示する。

$grep '^[^#]' file.txt
⇒先頭の一文字が#以外で始まるコメント行以外の行をすべて表示する。

$grep '.a[^b].' file.txt
⇒2文字目と5文字目がa。3文字目がb以外の行を表示する。

$grep ^# file.txt | wc -l
⇒戦闘が#で始まる行数を数える。

正規表現を使わずに検索を行う場合はfgrepやFオプションを使って検索します

$fgrep '^apple' sample.txt
⇒^appleの文字列をsample.txtから検索する。

$grep -F '^apple' sample.txt
⇒^appleの文字列をsample.txtから検索する。




  

2019年2月11日月曜日

【LinuC】ワイルドカードについて

コマンドラインを実行する際に使うことができるワイルドカードについてまとめます。

?   任意の一文字。
*   0文字以上の文字列。
[abc] abcのいずれかが一致。[a-c]と記載することもできる。
[!abc] abc以外の文字列。[!abc]と記載することもできる。
~   ホームディレクトリを表す。
$   変数の置換やコマンドの置換を行うことができる。
'    シングルクォート内の文字列が変数として展開されない。
”   ダブルクォート内の文字列が変数として展開される。
`   バッククォートはコマンドとして扱う。

【LinuC】シェル変数の説明


主なシェル変数の内容を紹介します。
Linux上で参照できる変数には、シェル変数と環境変数の2種類があります。


①シェル変数
 ・設定されたシェル上でのみ使用できる変数。
 ・設定内容の一覧を表示する場合は「set」コマンドを使用する。
 ・値を定義するときは「シェル変数名=値」とする。

■主なシェル変数
PWD:カレントディレクトリの絶対パス
PATH:参照しているコマンドのパス
HOME:ユーザのホームディレクトリ
PS1:プロンプトを定義
PS2:2次プロンプトを定義
HISTFILE:コマンド履歴を格納するファイルを定義
LANG:言語情報

 ・シェル変数を子プロセスでも参照させたい場合は、「export 変数名」や
 「decare -x 変数名」として、環境変数としてエクスポートするようにする。

②環境変数
 ・設定されたシェルで起動した子プロセスにも引き継がれて使用することができる変数
 ・設定内容の一覧を表示する場合は「env」コマンドを使用する。
 ・値を設定するときには「export 環境変数名=値」とする。

2018年12月29日土曜日

kill関数について


perlのスクリプトでプロセスをkillする処理があり、少し勉強したのでメモ。

■コマンド名
kill

■記法
kill <シグナル名> <プロセスID>

引数1 シグナル名
・シグナルは'TERM'としたり、シグナル番号の’15’を書いてもいい。
・マイナスをつけるとPIDに対してではなく、GPIDに対してシグナルを送信する。

引数2 プロセスID
・シグナルの送信先のプロセス。PID、もしくはGPIDを指定する。
・プロセスIDの方にマイナスをつけた場合にも、GPIDに対してシグナルを送信するようになる。

例)
kill TERM 100
 ⇒TERMのシグナルをPID100に送信

kill TERM -100
 ⇒TERMのシグナルをGPID100に送信

kill -TERM 100
 ⇒TERMのシグナルをGPID100に送信


■意味
指定したプロセスに対してシグナルを送信する。
送信できるシグナルは以下のコマンドで確認できる。

$ kill -l

PIDやGPIDはpsコマンドで確認できるけど、GPIDはオプションを指定しないと出力されないので注意。

$ ps -o user,group,pid,ppid,c,start_time,tty,time,comm


■使用例


※参考
<http://perldoc.jp/func/kill>

2018年12月20日木曜日

シェルの条件文の書き方


・数値の条件文の書き方

使用例

if [ $AAA -eq 0 ] ; then
    echo "$AAAは0";
fi


条件文
if [ $AAA -eq 0 ] ; then = EQUAL $AAAは0と等しい
if [ $AAA -ne 0 ] ; then != NOT EQUAL $AAAは0と等しくない
if [ $AAA -lt 0 ] ; then < LESS-THAN $AAAは0より小さい
if [ $AAA -le 0 ] ; then <= LESS-THAN OVER EQUAL $AAAは0以下(0を含む)
if [ $AAA -gt 0 ] ; then > GREATER-THAN $AAAは0より大きい
if [ $AAA -ge 0 ] ; then >= GREATER-THAN OVER EQUAL $AAAは0以上(0を含む)


2018年10月29日月曜日

平成30年度秋期午前2

午前2はダメでした。基礎的な問題も結構あったので完全な勉強不足です。
12/25(48%)

 1エ
 2ウ
 3ア〇
 4ウ
 5ウ
 6エ
 7イ〇
 8イ〇
 9エ
10ア〇
11ア
12ウ
13イ〇
14イ
15エ〇
16イ〇
17イ
18ア
19エ
20ウ〇
21エ
22エ〇
23イ〇
24ウ〇
25ア〇

平成30年度秋期午前1

結局、当日までに勉強時間が十分に取れず、午前1免除に絞った勉強に切り替えて、なんとか午前1は通りました。しかしギリギリでした…
19/30(63%)

 1ア〇
 2イ〇
 3ウ
 4イ〇
 5エ〇
 6エ〇
 7エ
 8ウ
 9ウ〇
10イ
11イ〇
12エ〇
13ウ〇
14ウ〇
15イ〇
16ア〇
17ア〇
18ウ〇
19ウ
20ウ
21ア〇
22イ
23イ
24エ〇
25ウ
26ア〇
27ウ〇
28イ〇
29ア
30ア