sedコマンド

LASTUPDATE:2023/12/19
正規表現(文字列と扱う場合はエスケープが必要)

. * + ? \ | $ ^ [ ] ( ) { }
正規表現ではないがエスケープが必要なもの " ' ` & ;
逆にエスケープ不要なもの : < > @

 

sed 's/ab/cd/' sは置換を意味する。正規表現に一致した最初のもののみが置換される。
最初に登場したab→cdに置き換える。
sed 'y/ab/cd/' yをつけるとsとは違う置換方法。a→c、b→dに置き換える。
sed 's/ab/cd/g' gをつけると一致したすべてのものを置換する。
sed '/正規表現/d' dをつけると正規表現に一致した行を削除する。
sed 's/ab/cd/i' iをつけると大文字と小文字を区別しない。

 

-r (-E) 拡張正規表現を使用する。
-e 複数の置換コマンドを利用する場合に使用する。
-n 出力コマンド以外の出力を行わない。
-f 文字列パターンを含むファイルを指定する。


使用例
echo abcdef|sed -e 's/abc/ABC/' -e 's/def/DEF/'
結果⇒ ABCDEF
--------------------------------------------------------------------------------
test.txt

aaa
bbb
ccc

cat test.txt|sed 's/aaa/AAA/'
結果

AAA
bbb
ccc

cat test.txt|sed -n 's/aaa/AAA/'
結果

 

cat test.txt|sed -n 's/aaa/AAA/p'
結果

AAA

cat test.txt|sed 's/aaa/AAA/p'
結果

AAA
bbb
ccc

sed -n '/正規表現/p'と書くと正規表現にマッチした行だけを出力してくれる。
cat file.txt|sed -n '/\.exe$/p'
--------------------------------------------------------------------------------
&は検索文字列を意味する。
echo 昨日は雨です|sed 's/雨/&&/'
結果

昨日は雨雨です

--------------------------------------------------------------------------------
()で囲んだものには番号が付き\1などで呼び出せる。これを利用するには-Eオプションが必要
echo 私は中学生です|sed -E 's/(私は)(中学生です)/\2\1/' 結果

中学生です私は

echo 私は高校生です|sed -E 's/(私)は(高校生)です/\2\1/' 結果

高校生私

--------------------------------------------------------------------------------
空行の削除
test.txt


aaa

bbb
ccc

cat test.txt|sed '/^$/d'
結果

aaa
bbb
ccc

--------------------------------------------------------------------------------

基本正規表現 拡張正規表現
* *
\+ +
\? ?
\{n,m\} {n,m}
\{n,\} {n,}
\{n\} {n}
\(regexp)\) (regexp)
\| |

Remnuxの初期設定 (ubuntu20.04)

RemnuxをVMwareで利用する際の初期設定で死ぬほどハマったので覚書をしておきます。

ネットワークの設定(NAT)
Ubuntu20.04のネットワーク接続はnetplanによって管理されている。
sudo vi /etc/netplan/01-network-manager-all.yamlで変更する。
(ens33となっているところを自分のインタフェース名で変更)


日本語設定:
① sudo□vi□~/.bashrc
② 末尾に行を追加して以下を記述して保存
     setxkbmap□jp
③ source□.bashrcを実行すれば日本語キーボードが使える。

 

時刻設定:以前時刻がずれているためaptが実行できない謎現象があったので設定
① sudo□dpkg-reconfigure□tzdata
② Asiaを選択→Tokyoを選択
③ sudo□date□MMDDhhmmYYYY

デスクトップのアイコンを表示
① sudo□apt□install□gnome-shell-extension-desktop-iconsを実行
② 再起動を実施したら表示される。

アイコンのサイズ変更
/usr/share/gnome-shell/extensions/desktop-icon@csoriano/prefs.jsを編集

デスクトップに共有フォルダへのリンクを作成
ln□-s□/mnt/hgfs/共有フォルダ名

yaraルールのパスを絶対パスに変更するスクリプト(test.sh)
sed -i 's/\.\//\/home\/remnux\/malware\/rules-master\//g' index.yar

POWERSHELL覚書 2021_06_14 USBコピー

クリップボードの内容を取得してUSBにコピー

$clip = get-clipboard
$hash_list = @()
"" > result.txt

foreach($i in $clip){

$second_list = $i.split(",")[7]

if($hash_list -contains $second_list){
continue
}

$i.split(",")[7] >> result.txt
$i.split(",")[1] >> result.txt
$i.split(",")[2] >> result.txt
$i.split(",")[3] >> result.txt
"VirusTotal:" >> result.txt
"" >> result.txt
"" >> result.txt
"" >> result.txt

$hash_list += $second_list

}
start .\result.txt


try{

if(Test-Path E:\result.txt){
remove-item E:\result.txt
}
move-item .\result.txt E:\ -Force -ErrorAction Stop
} catch {
write-host "Target is not found !!"
} finally {
}
start E:\

#################################

USBからデスクトップにコピーし、googleページを開く

try{
move-item E:\result.txt .\result.txt -Force -ErrorAction Stop

Start-Sleep -s 5 #5秒待つ
start .\result.txt
$flag = "OK"

} catch {
write-host "該当ファイルがUSBに存在しません。またはUSBが接続されていません。"
write-host ""
pause
} finally {
}

if($flag -eq "OK"){

$URL1 = -join ("https://www.virustotal.com/gui/search/","a4c238e647a46976fb7bdafcbeaee4f6b3c30bf07b0734a887c42292fb14bab7")
$URL2 = -join ("https://www.virustotal.com/gui/search/","066af88763e8514d8f572ad4e703b8712c6833d7394c92e3d6df173c2a69d3d5")
start $URL1
start $URL2
}

8_powershellの覚書 urlの登録

もっと便利になるはず。

 

#Windowを作成するおまじない。
$rui = $host.UI.RawUI
$rui.WindowSize = New-Object System.Management.Automation.Host.Size(80,30)


for($true){
write-host "######################################################################"
write-host "# #"
write-host "#  URL登録バッチ #"
write-host "# V1.0.0 #"
write-host "# #"
write-host "######################################################################"
write-host ""
write-host "保存するhtmlをドラッグしてください"
$html = read-host

$enter = "<br>"
$web_title = Read-Host("サイト名を入力してください")
$web_url = Read-Host("urlを入力してください")
$web_url_tag = "<a href=" + $web_url + ">" + $web_url + "</a>"

$web_title >> $html
$enter >> $html
$web_url_tag >> $html
$enter >> $html
$enter >> $html

Clear-Host
}

7_powershellの覚書 grepの作成

これ死ぬほど便利な予感。

 

# Windowを作成するおまじない
$rui = $host.UI.RawUI
$rui.WindowSize = New-Object System.Management.Automation.Host.Size(70,30)

for($true){
write-host "#############################################################"
write-host "# #"
write-host "# GREP検索 #"
write-host "# LASTUPDATE:2021/05/23_2022 #"
write-host "# #"
write-host "#############################################################"
write-host ""
write-host "検索フォルダをドラッグ&ドロップしてエンターキーを押してください。"
$search = Read-Host(">")
write-host ""
Write-Host "検索文字を入力してください"
$word = Read-Host(">")
write-host ""
Write-Host "該当しない行を表示したい場合はNを入力してください"
Write-Host "通常はそのままエンターキーを押してください。"
$exclusion = Read-Host(">")
if($exclusion -eq "N"){
$result = sls $word (dir -recurse $search ) -NotMatch | Tee-Object -file .\search_result.txt
start .\search_result.txt
write-host ""
"結果をバッチの実行場所にsearch_result.txtとして保存しました"
pause
break
}
write-host ""
Write-host "上下の行数を指定してください"
$row = Read-Host(">")
write-host""
$filename = Get-Date -Format "yyyy_MM.dd_HHmmss"
$result = sls $word (dir -recurse $search ) -Context $row | Tee-Object -file .\search_result_$filename.txt
start .\search_result_$filename.txt
write-host ""
"結果をバッチの実行場所にsearch_result_$filename.txtとして保存しました"
write-host ""

 

pause
Clear-Host
}