FC2ブログ

[std::istringstream, std::getline] 文字列 split (区切り文字 = 任意の1文字)

■ std::istringstream と std::getline (区切り文字 = 任意の1文字; 第3引数無 = '\n' 設定) を組み合わせる事により、
  文字列を任意の1文字にて分割可能。
■ テンプレート化により、T=double,float,int/std::string 等に対応。
  但し、
  std::istringstream を2段階 (下層 istringstream にて、テンプレート化対応) 用いる事が必須。
  ・・・ std::string → double 変換部を、T field; istr >> field; (★ポイント) にて実装。
  → 文字ブロック内の空白文字はNGだが、区切り文字近傍の空白文字は分割には影響しない。
    (例; ABC,DEF,GHI と ABC, DEF, GHI は同じ結果となる。・・・ , G  HI 等の間に空白文字はダメ)
    (例; 11.1,22.2,33.3 と 11.1, 22.2, 33.3 は同じ結果となる。)

" splitd.h
======================================================
#include <string>
#include <sstream>
#include <vector>

#ifndef SPLITD_H_
#define SPLITD_H_

template <typename T>
std::vector<T> splitd (const std::string& string, const char& delimiter);

#endif /* SPLITD_H_ */
======================================================

" splitd.cpp
======================================================
#include "splitd.h"
template <typename T>
std::vector<T> splitd (const std::string& string, const char& delimiter)
{
std::istringstream iss(string);

std::vector<T> result;
std::string line;
while(std::getline(iss, line, delimiter))
{
std::istringstream istr(line);
T field;
istr >> field;
result.push_back(field);
}

return (result);
}
// テンプレート明示的実体化
template std::vector<double> splitd (const std::string& string, const char& delimiter);
template std::vector<std::string> splitd (const std::string& string, const char& delimiter);
======================================================

" main.cpp
======================================================
#include <iostream>
#include <string>
#include <vector>
#include "splitd.h"

int main (void)
{
const std::string strs = "ABC,DEF,GHI";
char delimiters = ',';
std::vector<std::string> VAS1Dd = splitd<std::string>(strs, delimiters);
for (auto & e : VAS1Dd)
{
std::cout << e << std::endl;
}

const std::string strd = "11.1,22.2,33.3";
char delimiterd = ',';
std::vector<double> VAD1Dd = splitd<double>(strd, delimiterd);
for (auto & e : VAD1Dd)
{
std::cout << e << std::endl;
}

return (0);
}
======================================================


参考文献:
■ C++ テンプレート ヘッダと実装を別にした時に起こること
■ テンプレートの実装をヘッダに書かなければならない理由

関連記事
スポンサーサイト



[std::istringstream] 文字列 split (区切り文字 = 空白)

■ std::istringstream (区切り文字 = 空白) により文字列を分割可能
■ テンプレート化により、T=double,float,int/std::string 等に対応。
  ヘッダとソース分離の為、ヘッダ内にテンプレートの明示的実体化。

" split.h
======================================================
#include <string>
#include <sstream>
#include <vector>

#ifndef SPLIT_H_
#define SPLIT_H_

template <typename T>
std::vector<T> split (const std::string& string);

#endif /* SPLIT_H_ */
======================================================

" split.cpp
======================================================
#include "split.h"
template <typename T>
std::vector<T> split (const std::string& string)
{
std::istringstream iss(string);

std::vector<T> result;
T field;
while (iss >> field)
{
result.push_back(field);
}

return (result);
}
// テンプレート明示的実体化
template std::vector<double> split (const std::string& string);
template std::vector<std::string> split (const std::string& string);
======================================================

" main.cpp
======================================================
#include <iostream>
#include <string>
#include <vector>
#include "split.h"

int main (void)
{
const std::string sstr = "abc def ghi";
std::vector<std::string> VAS1D = split<std::string>(sstr);
for (auto & e : VAS1D)
{
std::cout << e << std::endl;
}

const std::string dstr = "12.3 45.6 78.9";
std::vector<double> VAD1D = split<double>(dstr);
for (auto & e : VAD1D)
{
std::cout << e << std::endl;
}

return (0);
}
======================================================


参考文献:

関連記事

[find] カレントディレクトリ内ファイルのフルパス取得

■ カレントディレクトリ内ディレクトリ/ファイルのフルパスを取得するには、
  find コマンドの対象ディレクトリを `pwd` とすれば良い。
例)
Unix風パス)
find `pwd` -type d/f -mindepth 1 -maxdepth 1

Windows風パス)
find `pwd` -type d/f -mindepth 1 -maxdepth 1 | xargs -I{} ${DRIVE}${prefix}{}
→ ${DRIVE} = C: 等ドライブパス, ${prefix} = Unix環境格納ディレクトリ 等


参考文献:
■ findコマンドでファイルのフルパス名を取得する

関連記事

[find,xargs,grep] 特定ディレクトリ内の特定形式ファイル内文字列検索

■ 特定ディレクトリ内の特定形式ファイル内文字列検索を実施するには、2通りの手法が考えられる。
① find ディレクトリ -type f -name "*.拡張子" | xargs grep "pattern"
  → find にて特定形式ファイルを絞り込み、各々に対して grep 検索する。
② grep -r "pattern" --include="*.拡張子" ディレクトリ
  → grep に対して再帰オプションを設定し、
    --include オプションにて特定形式 (拡張子) を指定する。
    (※ 再帰オプションを設定しなければ、
    配下ディレクトリ内ファイルを検索する際に (ディレクトリであるとの) エラーが出る。)


参考文献:
■ [技術][unix] 再帰的なgrep。ファイルパターンを指定しない場合と指定する場合。
■ [Linux] 再帰的に grep を実行する

関連記事

[仮想環境構築] Anaconda

@編集中

■ 仮想環境構築ツール Anaconda
→ Environments にて、Python環境及び各種モジュール類環境を切替え可能 ・・・ 仮想環境構築ツールの所以
→ Home::ランチャー画面にて、各種モジュールのインストール/起動/アンインストールが可能  (なはずだが動かない。。。)

■ Anaconda Navigator及び関連コマンドを実行する為に、
  環境変数PATHへ以下を登録する必要がある。
  → Anacondaインストールディレクトリ
  → Anaconda/Scriptsインストールディレクトリ

■ 各種モジュール類のインストール/アップデート/削除
  → conda install package
  → conda update package
  → conda remove package

■ Anaconda Navigator::Homeランチャーを正常動作させる為には、、、
  → Anaconda/Menu/*.json にランチャー情報が保存されている。
    これを見ると、${PYTHON_SCRIPTS}/*.py を別途呼び出ししているのみの模様。
    → ${PYTHON_SCRIPTS} が正しく設定されるようにすれば良さそう。(@編集中)
例) Spyder ・・・ spyder_shortcut.json
{
    "menu_name": "Anaconda${PY_VER} ${PLATFORM}",
    "menu_items":
    [
        {
            "name": "Spyder",
            "pywscript": "${PYTHON_SCRIPTS}/spyder-script.py",
            "workdir": "${PERSONALDIR}/Python Scripts",
            "icon": "${PYTHON_SCRIPTS}/spyder.ico"
        },
        {
            "name": "Reset Spyder Settings",
            "pyscript": "${PYTHON_SCRIPTS}/spyder-script.py --reset",
            "workdir": "${USERPROFILE}",
            "icon": "${PYTHON_SCRIPTS}/spyder_light.ico"
        }
    ]
}


参考文献:
■ 

関連記事
関連記事

[bash] 配列宣言及び内容表示

■ declare -a 配列名=("要素1" "要素2" ・・・) にて、配列を宣言可能。
例) declare -a animals=(dog cat monkey bird)

■ declare -p 配列名にて、配列の内容表示可能。
例) declare -p animals
declare -a animals=([0]="dog" [1]="cat" [2]="monkey" [3]="bird")

ちなみに、
declare -ap animals=(・・・) にて配列を宣言することにより、配列宣言と同時に内容表示も可能。


参考文献:
■ 配列のセット

関連記事
関連記事
関連記事

[クイックパーツ] 定型的内容 (テキスト・画像・表) 挿入の簡易化

■ 挿入 > クイックパーツ により、定型的内容の挿入を簡易化可能。
定型的内容例) テキスト、画像、表

■ 定型的内容作成→クイックパーツへの登録→クイックパーツ挿入の流れ
テキストの場合)
① メール本文編集画面にて雛形化する文章を入力後、当該文章全体を選択し、
  [リボン] 挿入→テキスト→クイックパーツ→選択範囲をクイックパーツギャラリーに保存
1_登録用文章作成
2_登録用文章選択
3_選択範囲をクイックパーツギャラリーに保存

② 新しい文書パーツの作成にて、名前及び分類(新規作成可)を登録
→ ギャラリーはクイックパーツに登録するのがオススメ (後述)。
4_新しい文書パーツの作成

③ 新規作成状態にて、
  [リボン] 挿入→テキスト→クイックパーツを選択すると、
  登録済クイックパーツを挿入可能。
5_新規作成状態
6_クイックパーツ呼び出し
7_クイックパーツ挿入

④ クイックパーツを編集・削除
[リボン] 挿入→テキスト→クイックパーツにて、
何でも良いので、クイックパーツ上で右クリック
→メニュー内の整理と削除を選択→文書パーツオーガナイザにて編集・削除する。
8_文書パーツオーガナイザ 


ちなみに、
新しい文書パーツの作成画面内のギャラリーを ”定型句” に登録すると、
クイックパーツ挿入時にプレビューされない為、
右クリックメニュー→整理と削除から文書パーツオーガナイザを開き、
当該文書を選択後、挿入ボタンを押さなくてはならないので非常に面倒。
9_新しい文書の作成(定型句) 
10_文書パーツオーガナイザからの挿入 


画像・表の場合)
① テキストの場合と同様、雛形登録する内容を入力・選択し、
  [リボン] 挿入→テキスト→クイックパーツにて、選択範囲をクイックパーツ ギャラリーに保存
  以降、同様。
11_画像・表をクイックパーツ登録 

関連記事

[閲覧モード] 切り替え (その他::閲覧モード or 起動時オプション /b)

テキストエディタ "秀丸" での、
■ メニュー::その他::閲覧モード にて、閲覧モードへ切替が可能。
■ 起動時オプション /b 指定にて、閲覧モードでの起動が可能。
→ テキストファイルを開いた後のキー誤操作による、
  内容を削除してしまうことが無くなる (コピーのみ可能)。


参考文献:
■ 秀丸エディタ起動時のオプション
■ 第IV部~テキスト編集を極める!! 起動オプションを使ってみよう

[Windows10] 仮想デスクトップ

■ Windows10 より標準化導入された仮想デスクトップ
Win + Ctrl + D : 仮想デスクトップ作成
Win + Ctrl + ←/→ : 仮想デスクトップ間移動
Win + Tab : 仮想デスクトップ一覧表示

@仮想デスクトップ一覧表示
各アプリケーション領域内で右クリック : 特定仮想デスクトップ/新規仮想デスクトップへ移動、右/左にスナップ


参考文献:
■ Windows10の便利すぎる時短ショートカット10 これでサクサク操作できるよ!

関連記事
関連記事

[検索フォルダ] メール仕分け負荷大幅軽減

■ 検索フォルダを利用することにより、
  ユーザー側でのメール仕分け負荷を大幅に軽減出来る。
→ メール実体を格納している訳ではなく、
  検索結果のみを保存しているのか、仮想的なフォルダのような感じ。
  (検索フォルダを削除する際に、メール自体は削除されないと案内が出る。)
  → 後々の検索の為に、フォルダにメール仕分けするのは作業的に非常に負荷が大きいが、
    検索フォルダ機能であれば、検索したい時に検索したい内容にて、柔軟に検索実行・検索結果保持が可能。
    (検索条件を変更したければ消して作成し直せばよい (実体は削除されないので))
⇒ 検索結果を保存しておく、という非常に素晴らしい概念!!!

MSO::OUTLOOK::検索フォルダ 

<事例>
例1) 自分が送信したメール
→ カスタム検索フォルダを作成する、にて差出人に自分を登録する。
  → 送信トレイをわざわざ作成する必要が無くなる (これだけでメール仕分けが単純に半分に!!!)

例2) 定例等の開催案内・議事録メール
→ 特定の文字を含むメール、にて定例等の名前を登録する。
  → 例えば、会議関連::各定例というフォルダ構成ではなく、
    会議関連というトップフォルダのみ作成しておき、
    検索フォルダにて定例名を含む定例毎の検索フォルダを作成すれば、
    フォルダ階層を辿ってメール仕分けする作業負荷が無くなる (会議関連に放り込むだけ!!!)

例3) 添付ファイルのあるメール
→ 添付ファイルのあるメール、にて添付ファイル有のメールのみを抽出可能。
  → 検索::詳細オプションにて、添付ファイル有のメールをわざわざ検索する必要が無くなる。

例4) 特定の人と交換したメール
→ 特定の人と交換したメール、にて宛先または差出人を限定可能。
  → 検索::詳細オプションにて、宛先または差出人にてわざわざ検索する必要が無くなる。
    (進捗管理や履歴調査の為にしばらくの間、何度か検索する際の手間が全く不要になる!!!)

例5) 特定の人からのメール
→ 特定の人からのメール、にて差出人を限定可能。
  → 検索::詳細オプションにて、差出人にてわざわざ検索する必要が無くなる。
    (進捗管理や履歴調査の為にしばらくの間、何度か検索する際の手間が全く不要になる!!!)


参考文献:
■ MS Support はちらほら散見されるものの、Tipsとして挙げている個人ページは殆ど見当たらない。

関連記事

[テキスプローラ] テキスト形式ファイルプレビューソフト

■ ファイルプレビューソフト "テキスプローラ" にて、
  テキスト形式ファイルをわざわざ開くことなくプレビュー可能。
  他、HTML形式ファイルであれば、テキスト内容及びレンダリング内容を並べてプレビュー可能 (ブラウザ立ち上げ不要)。
→ メーラーのような画面構成にて、
  テキスト形式ファイル、HTML形式ファイルを次々とプレビュー出来る。


参考文献:
■ MAN Soft::テキスプローラ

関連記事

[エクスプローラ] プレビュー機能

■ プレビューハンドラの設定により、
  プレビューハンドラが存在し、かつ、それと拡張子を関連付けることにより、
  Windowsエクスプローラ内のプレビュー画面にて、ファイルをわざわざ開くことなくプレビューが可能。
例) MSO::Word/Excel/PowerPoint/Visio 等自身は、各々のファイル形式をプレビュー可能。
例) Adobe::Acrobat/Illustrator 自身は、.pdf/.ai ファイル等各々のファイル形式をプレビュー可能。
例) テキスト形式の様々なファイル (例; .txt, .csv, .tsv, .log, .sh, .h, .cpp, .xml, .html, .css, .rb, .python, .js 等々) を、
  プレビューハンドラ Windows TEXT Previewer に関連付け。


参考文献:
■ Preview Handler Association Editor @ Microsoft MSDN
■ エクスプローラでログファイルがプレビューされるようにする
■ エクスプローラのプレビューウインドウにログファイル(Log)を表示させる
■ Window7のプレビューペインを使いこなす

関連記事

[sed] 各種オプション/スクリプトコマンド

■ 各種オプション
-e sedスクリプトコマンド指定 例) -e "スクリプトコマンド"
-f sedスクリプトファイル読込 例) -f "スクリプトファイル (スクリプトコマンドを記述)"
-n デフォルトの出力抑制
-i ファイルが対象の場合、直接上書き保存

■ スクリプトコマンド
d 該当行のみ削除
p 該当行のみ抽出 ・・・ -n オプションとの組み合わせが必要。
s/before/after/ ・・・ beforeをafterに置換。複数マッチの場合は最初のみ。全て置換する場合は/gオプション指定必要
i 文字列挿入
a 文字列追加
w file ファイルに出力 (複数指定可能)


参考文献:
■ sed に関するメモ
■ sed コマンド

関連記事
関連記事

[find] 正規表現

■ 正規表現オプションにて、ディレクトリ名及びファイル名を正規表現に基づいて探索可能。
例) find ./ -type d/f -regextype "正規表現型" -regex "正規表現"

◆ 正規表現型
posix-basic/posix-egrep/posix-extended/posix-minimal-basic/
awk/gnu-awk/posix-awk/
grep/egrep/
ed/sed/
emacs/
findutils-default/

◆ 正規表現
各正規表現型に基づく。
→ エスケープの様が異なる等、各正規表現型での使い方を参照。


参考文献:
■ findでregextypeを指定すると捗る件
■ 正規表現に合致するファイル名をfindする方法

関連記事

[bash] 動作オプション

■ shopt ・・・ 一覧表示
■ shopt -s "option" ・・・ 有効化
■ shopt -u "option" ・・・ 無効化

関連記事

[find,sed,xargs mv] ディレクトリ/ファイルの名前一括変更

■ ディレクトリ・ファイルの名前一括変更をするには、sedスクリプトとxargsコマンドを用いれば可能。

find ./ -type d or f | sed 'p;s/before/after/' | xargs -n 2 mv
→ find ./ -type d or f にて、対象ディレクトリ名またはファイル名を標準出力に1行1つずつ表示
→ | sed 'p;' にて、置換前対象ディレクトリ名/ファイル名自体を標準出力に "一旦" 表示
→ | sed 's/before/after/' にて、置換後ディレクトリ名またはファイル名を標準出力に表示
  → この時点で、置換前/後対象ディレクトリ名/ファイル名を標準出力に "1行毎交互" に表示 (★)
これを xargs コマンドに流し込むが、
→ | xargs -n 2 として、置換前 置換後、置換前 置換後、・・・ という区切り方にし、(★)
  これを mv コマンドに与える。
⇒ sed 'p;' にて1行毎交互、xargs -n 2 にて置換前 置換後
  という区切り方を構築するのがポイント。


参考文献:
■ Sed でファイル名と内容を一括置換

関連記事
関連記事
関連記事

[C/C++] ヘッダファイル種類

■ C/C++ ヘッダファイル種類
ヘッダ種類 備考
C系 stdio.h, string.h, stdlib.h, ...
C系→C++ cstdio, cstring, cstdlib, ...
C++ (旧→新) iostream, string, ... 旧→新にて、名前空間stdへ移行
C++ (新規追加) filesystem, optional, variant, any, memory_resource, string_view, ... C++17にて、実装 (予定)


参考文献:

関連記事
関連記事
関連記事

[getopt] Cライブラリ関数 on Unix

■ Cライブラリ関数 on Unix (#include <unistd.h> → 内部で#include<getopt.h>) getopt関数 により、オプション/オプション引数、及び、引数処理が可能。
  → 当該ライブラリ内では、グローバル変数を用いている。
    (*optarg, optind, opterr, optopt)
尚、
  → オプションは引数よりも前に配置する必要がある。
  → オプション表記は1文字にしか対応していない。(ロングオプション非対応; 別途、getopt_long関数 等参照)
  → オプション引数として負数 (- ハイフン文字含) を与える場合には、-- にてオプションを終了させる必要がある。


参考文献:
関連記事

[getopt] /usr/bin/getopt によるオプション及び引数処理

■ /usr/bin/getopt により、オプション/オプション引数、及び、引数処理が可能。
→ getopt コマンドを1度呼び出すのみでは、1つのオプション/オプション引数しか処理出来ない為、
  複数オプション/オプション引数処理の為には、while ループとcase 構文を組み合わせることが必要。
→ 内部に於いては、setコマンドにより一旦中間文字列を生成し、それをwhile ループとcase構文にて処理する。 
尚、
→ オプションは引数より後に配置してもよい。
→ オプション表記は複数文字にも対応している。(ロングオプション対応)
→ 空白や特殊文字を含む場合には正常に処理出来ない。


参考文献:
■ bash によるオプション解析
■ [sh][DONE] getopts - コマンド "getopt", "getopts" の使い方を把握する

関連記事

[getopts] bash シェルビルトイン関数によるオプション及び引数処理

■ bash シェルビルトイン関数 getopts により、オプション/オプション引数、及び、引数処理が可能。
  → getopts 関数を1度呼び出すのみでは、1つのオプション/オプション引数しか処理出来ない為、
    複数オプション/オプション引数処理の為には、while ループとcase 構文を組み合わせることが必要。
尚、
  → オプションは引数よりも前に配置する必要がある。
  → オプション表記は1文字にしか対応していない。(ロングオプション非対応)


参考文献:
■ bash のシェルスクリプト(関数)でオプション引数を扱う getopts 使い方サンプル
■ bash: コマンドライン引数のオプション解析(getopts)
■ bash によるオプション解析

関連記事

[vim/gvim] 起動方法差違による外部コマンド実行環境 (環境変数PATH)

■ vim/gvim 起動方法差違により、外部コマンド実行環境 (環境変数PATH優先順位 起因) が異なる。
  □ Windowsネイティブな起動 ・・・ WindowsOS環境変数PATH (先頭側) > Unix環境変数PATH
  □ MSYS2 mintty内から起動 ・・・ Unix環境変数PATH (先頭側) > WindowsOS環境変数PATH
  → :echo $PATH により、環境変数PATH の優先順位を確認可能。
  → Unixコマンドを用いる際には、Unix環境変数PATHをWindowsOS環境変数よりも先頭側に配置する必要がある。
    そうでなければ、WindowsOS側とコマンド名が重複するコマンドにてエラーが発生しうる。
    例) findにて、"FIND: パラメータの書式が違います" というエラーになる。
      → 意外と気がつきにくいので要注意。

尚、
※ 実行環境 (環境変数PATH優先順位 起因) に於けるトラブルは、
  Unix環境をWindowsOS環境上で利用する際には起こりうる/起こりやすいトラブルである。
  (他; Cygwin, MinGW, MSYS etc.)

関連記事
関連記事

[xmllint] xml parse on bash

<XML解析ライブラリ xmllint>
■ インタラクティブ
xmllint --shell file.xml
にて xmllintを開始すると、インタラクティブモードにてxml解析が可能。
cat /xmlroot/xmltag
のように、
cat (xmllint 特有コマンド; Unix コマンドと重複) を用いて、xmltagを表示する。

■ 非インタラクティブ; --shell オプション
echo "cat /xmlroot/xmltag" | xmllint --shell file.xml"
にて xmllintを実行すると、非インタラクティブにxml解析が可能。
/ > cat /xmlroot/xmltag ------- <xmltag>content</xmltag> / >
のように、
xmllint 区切り文字及び入力コマンド、及び、xmltag 中身が標準出力に表示される。
→ シェルスクリプト及びプログラム側ではxmltag 中身だけが必要である事が多い為、
  この場合には、
  標準出力に表示される文字列を一旦文字列として変数に格納し、
  さらにこの文字列変数に対する文字列抽出 (整形含) 作業が別途必要となる。

■ 非インタラクティブ; --xpath
xmllint --xpath /xmlroot/xmltag file.xml
にて xmllintを実行すると、非インタラクティブにxml解析が可能。
<xmltag>content1</xmltag><xmltag>content2</xmltag> …
のように、
xmltag 名及び xmltag 中身が標準出力に表示される。複数要素を含む場合には複数表示される。
→ xmltag 名を含む為、文字列に対する文字列抽出 (整形含) 作業が別途必要になる。

xmllint --xpath /xmlroot/xmltag/text() file.xml
にて xmllintを実行すると、非インタラクティブにxml解析が可能。
content1content2 …
のように、
xmltag 中身が標準出力に表示される。複数要素を含む場合には複数表示される。
→ 改行を含まない為、文字列に対する文字列整形作業が別途必要となる。
  (text()を使用せず、xmltag 名にて文字列抽出後、改行付加 by sed)


参考文献:
■ The XML C parser and toolkit of Gnome - libxml
■ ShellScriptでXMLの内容を取り出す
■ jq、xmllintコマンドさようなら。俺はパイプが好きだから
■ 【Shell】XMLファイルから要素や属性を抽出する
■ 君は、grep -o オプションを知っているか?(grepでマッチした部分のみ抽出、後方参照の¥0)

[sed] 操作対象文字列/操作対象ファイルに対する複数一括操作

■ -e オプション (sedスクリプト) を複数連結することにより、複数一括操作が可能。
例) sed -e "sedスクリプト1" -e "sedスクリプト2" ・・・ "操作対象文字列"
例) sed -i -e "sedスクリプト1" -e "sedスクリプト2" ・・・ "操作対象ファイル"

■ -f オプション (sedスクリプトファイル読込) により、複数一括操作が可能。
例) sed -f "sedスクリプトファイル (置換リスト)" "操作対象文字列"
例) sed -i -f "sedスクリプトファイル (置換リスト)" "操作対象ファイル"
  置換対象ファイル (target_file.txt):
  abcde
  fghij
  klmno
  pqrst
  uvwxy
  z

  sedスクリプトファイル; 置換リスト (replaces.sed):
  s/c/-/
  s/o/-/
  s/hij/---/

  sed -i.bak -f replaces.sed target_file.txt
  ab-de
  fg---
  klmn-
  pqrst
  uvwxy
  z


参考文献:
■ Unix :: コマンド / sed
■ スクリプト言語sed、awk

関連記事

[sed] ファイル編集後のファイル保存 (上書き/バックアップ可)

sed では標準入力またはファイル入力による文字列に対して編集を行い、標準出力に結果を出力する。
さらにその出力結果内容をリダイレクトによりファイル保存することが可能。

操作対象ファイルに対する文字列編集後に、
■ 別名ファイルへリダイレクトする分には何も問題は起きない。
例) sed -e "s/before/after/g" target_file > destination_file

■ 同一ファイルへリダイレクト (上書き保存の為) する事は出来ない。
  操作対象ファイル自身が結果的に空ファイルとなる。
  → インライン編集 -i オプション (-i.bak にてバックアップ可) を指定することが必須。
    → もしも操作対象ファイルと同一名ファイルにリダイレクト (上書き) すれば、
      コマンド実行よりも前にリダイレクト処理が成され (この瞬間に対象ファイルと同一名ファイル、
      すなわち操作対象ファイル自身が空ファイルと成り)、
      空となった操作対象ファイルに対して、引き続きコマンドが実行される為、
      空ファイルに対しては何も起こらずコマンドが完了 (標準出力に対する結果出力内容は空) し、
      結果的に空の内容がリダイレクトによりファイル保存される。
      (つまり、操作対象ファイルが空ファイルとなってコマンドが終了)
例)
sed -e "s/before/after/g" target_file > target_file
(×)

(○)
sed -i -e "s/before/after/g" target_file       ・・・ 直接上書き
sed -i.bak -e "s/before/after/g" target_file ・・・ バックアップファイル生成

関連記事
関連記事

[xargs] bashスクリプト内ユーザー定義関数の実行

■ xargsから、bashスクリプト内ユーザー定義関数を直接的に実行することが出来ない為、
  export -f function_name
  にて、xargs以前に於いて、関数を一旦エクスポートする必要がある。
■ さらに、xargsからbashをコマンド引数付き (-c オプション) で呼び出す。
  bash -c "コマンド"
→ こうしなければ、xargs: func: No such file or directory というエラーで終了する。
→ さらに、引数内に " (ダブルクォート) を含む場合には、さらに \で (\"のように) エスケープする必要がある。

例)
#!/bin/bash
function func ()
{
  echo -e "filename = ${1}"
}
export -f func

find ./ -type f -name "*.txt" | xargs -t -I{} bash -c "func {}"

ちなみに、
→ -t ・・・ xargs での実行コマンド確認
→ -I{} ・・・ -Iオプション (引数代入文字変数指定) により、{}を引数代入文字変数として扱う。

参考文献:
■ xargsにbashのfunctionを渡す方法

関連記事

[vim/gvim] マクロ記録/閲覧/編集/実行

<マクロ記録>
ノーマルモードにて、
? をマクロ割り当て文字1文字として、
q? ~(記録)~ q ・・・ qにてマクロ記録開始、マクロ割り当て文字として ? を指定、マクロ記録、qにて記録終了
例) qq ・・・ q にマクロ割り当て

<マクロ閲覧>
:reg
→ マクロ一覧を閲覧 "? (? はマクロ割り当て文字1文字)

<マクロ編集>
:let @?=' → Ctrl + r → ? 入力 → (補完) → (編集作業) → ' (クォート閉) → Enter
→ レジスタ内変数を呼び出し (補完含)、編集して再登録

<マクロ実行>
@?

関連記事

[bluewind] コマンド入力型ランチャー::呼び出しキー設定 (iniファイル直接修正)

# 設定ファイル ・・・ /bluewind/Users/username/bluewind.ini
※ ランチャー呼び出しキー編集は設定ダイアログから出来ない為、iniファイルを直接修正する。
※ bluewind終了時に当該iniファイルは上書きされてしまう為、iniファイル修正は非起動中に行う。
===============================================================
■ ソフト起動ショートカット = CapsLock
Call_key=240
Call_Mod=0
Call_S=CapsLock
bluewind_基本-呼び出しキー 
※ キー情報抽出ソフト
key2code
key2code.png 
関連記事
関連記事
関連記事

[vim/gvim by NeoBundle] ~/.vim/Shougo.vim

" Shougo氏作 各種プラグイン (自導入一部)
"" Integrated User Interface
NeoBundle 'Shougo/unite.vim'
"" most recently used files
NeoBundle 'Shougo/neomru.vim'
"" filemanager
NeoBundle 'Shougo/vimfiler.vim'
""
NeoBundle 'Shougo/vimshell.vim'

"" completion
NeoBundle 'Shougo/neocomplete.vim'
NeoBundle 'Shougo/neocomplcache'
NeoBundle 'Shougo/neosnippet.vim'
NeoBundle 'Shougo/neosnippet-snippets'

"" 非同期処理 (Kaoriya版vim には予め含む)
NeoBundle 'Shougo/vimproc', {
\ 'build' : {
\ 'windows' : 'make -f make_mingw64.mak',
\ 'cygwin' : 'make -f make_cygwin.mak',
\ 'mac' : 'make -f make_mac.mak',
\ 'unix' : 'make -f make_unix.mak',
\ },
\ }
関連記事

[vim/gvim by NeoBundle] ~/.vim/*.* ディレクトリ構造

$HOME.vim/格納
ディレクトリ
注釈
~/.vim/bundle/neobundle.vim/NeoBundle本体
各種
plugins/
*NeoBundleにより
インストールされる
プラグイン
userautoload/init/basic.vim
encoding.vim
netrw.vim
...
vim単体
ユーザー定義設定
colorscheme/...カラースキーム
(別途インストール)
extensions/viewoutput.vim
...
パッケージ管理外
プラグイン
plugins/*.vim各種プラグイン
個別設定
system.vim
Shougo.vim
filenamager.vim
statusline.vim
bash.vim
colorscheme.vim
...
--NeoBundleにより
インストールする
プラグインリスト
分類記述
(複数プラグイン
設定/1file)


参考文献:
■ vimrc分割した
関連記事
関連記事
関連記事