導航:首頁 > 凈水問答 > sh過濾字元串

sh過濾字元串

發布時間:2022-05-30 03:38:58

① 如何用shell提取文件中指定的字元串

cut命令

用法: cut 參數 文件名
說明:cut 命令從文件的每一行剪切位元組、字元和欄位並將這些位元組、字元和欄位寫至標准輸出。
參數:
-b :以位元組為單位進行分割。這些位元組位置將忽略多位元組字元邊界,除非也指定了 -n 標志。
-c :以字元為單位進行分割。
-d :自定義分隔符,默認為製表符。
-f :與-d一起使用,指定顯示哪個區域。
-n :取消分割多位元組字元。僅和 -b 標志一起使用。如果字元的最後一個位元組落在由 -b 標志的 List 參數指示的
更多參數請參考:cut - -help
-b用法:
以位元組為單位,指定相應的位元組輸出,由於一個英文字元只佔用一個位元組,所以對英文字元可以與-c等價,但是佔用多個節編碼的字元不適用,比如中文;
文件內容:

$ cat test.txt
1234567890
ABCDEFGHIJ
abcdefghij
hello wrold!

指定文件中每行的第1,3到7個字元輸出:

cut -b 1,3-7 test.txt
134567
ACDEFG
acdefg
hllo w

-n表示1到前n個字元,n-表示從n開始的所有字元
列印前兩個字元和從第8個開始的字元

$ cut -b -2,8- test.txt
12890
ABHIJ
abhij
herold!

中文:
文件內容:

$ cat test1.txt
我們好像在哪見過
你記得嗎?
好像那是一個春天!

② shell 中如何去掉字元串中間的空格

先建腳本:clearspace.sh
給腳本添加執行許可權 chmod +x clearspace.sh
編輯腳本內容:

touch tmpFile # 建臨時文件
sed 's/\ //g' $1 >temFile #sed s命令 將空格替換 重定向到臨時文件
cat temFile >$1 #覆蓋原文件
rm -f temFile #刪除臨時文件
echo 'OK,DONE!'

執行腳本 ./clearspace.sh souceFile

③ shell去掉字元串中的特定字元的方法是什麼

sed 's;pub/test/aaa.txt;d' file

sed命令的s後面第一個字元就是分隔符,分隔符跟你說的特殊字元不一樣就可以了。

④ php過濾指定字元的函數

explode — 使用一個字元串分割另一個字元串

array explode ( string $delimiter , string $string [, int $limit ] )

此函數返回由字元串組成的數組,每個元素都是 string 的一個子串內,它容們被字元串 delimiter 作為邊界點分割出來。

<?php
//示例1
$pizza="";
$pieces=explode("",$pizza);
echo$pieces[0];//piece1
echo$pieces[1];//piece2

//示例2
$data="foo:*:1023:1000::/home/foo:/bin/sh";
list($user,$pass,$uid,$gid,$gecos,$home,$shell)=explode(":",$data);
echo$user;//foo
echo$pass;//*

?>

⑤ 如何對shell的字元串中的子串作查找和替換

待查找字元串是參數?還是文本里的?還是變數?
當作變數處理,以參數作為初始值= =|

#!/bin/sh
var="$1"
if [ "${var/hardware.abc/software.abc}" != "$1" ]
then
echo "please put function here"
var="${var//hardware.abc/software.abc}"
fi

⑥ 使用shell根據條件提取文件中指定的字元串

root@localhost:~/xly/02# cat a
013.000.000 XXXxx Wwww [02111]
root@localhost:~/xly/02# cat b
02111

root@localhost:~/xly/02# cat abc.sh
#!/bin/bash
for i in `cat b`
do
awk '/'$i'/{print $2," ",$3}' a >>c
done
cat c
確定需要的內容是第二列和第三列哦~

root@localhost:~/xly/02# cat c
XXXxx Wwww

⑦ shell腳本如何刪除指定字元串,文檔如下:

用正則匹配就可以了。
shell腳本regex正則表達式 和 字元串替換

任意字元
^行首匹配
$行尾匹配
^$表示空行,不含字元的行
^
$匹配只有單個空格的行
[0-9]
[a-zA-Z]
^[A-
Z]搜索以大寫字母開頭的行
[^A-Z]匹配大寫字母意外的任意字元
*表示匹配0個或若干個字元,如:a*,表示匹配0個或若干個a;
aa*表示匹配至少1個a
.*來表示0或若干個任意字元
e.e*表示匹配第一個e和最後一個e之間的任意字元
[-0-9]匹配一
個連字元或數字
[]a-z]匹配一個]或者字母
\{min,max\}匹配任意數目的字元串
[a-z]\{10\}只匹配10個
a-z字元的字元串
s/.\{5\}$// 刪除每行的最後5個字元
\(...\),n是1到9的數字,表示存儲用的寄存器,用\n來引
用存在寄存器中的內容
^\(.\)\1匹配行首的第一個字元,並將該字元存到1號寄存器中,然後匹配1號寄存器中的內容,這由\1的描述。該正則
表達式的最終效果是,如果一行的頭兩個字元相同,就匹配他們。
^\(.\).*\1$匹配一行中的頭一個字元(^.)跟最後一個字元(\1$)相
同的行。.*匹配中間的所有內容
^\(...\)\(...\)行中頭三個字元存在1號寄存器,接著的三個字元存在2號寄存器.
s/\(.*\)
\(.*\)/\2 \1/g 交換兩個欄位
.任何字元
^行首
$行尾
*前導的正則表達式重復0或若干次
[字
符表]字元中的任一字元
a..表示a後的2個字元
^wood表示行首的wood
x$表示行為的x
^INSERT$只包含
字元串INSERT的行
^$不包含任何字元的行
x*表示0或若干個連續的x
xx*表示1或多個連續的x
.*表示0活若干
個字元
w.*s表示以w開始,s結尾的任何字元串
[tT]小寫或大寫的t
[^字元表]表示任一不在字元表中的字元 [^0-9]
[^a-zA-Z]
\{min,max\}表示前導的正則表達式重復只燒min次,至多max次[0-9]\{3,9\}表示3到
9個數字
\(...\)表示將小括弧中匹配的字元串存儲到下一個寄存器中(1-9),
^\(.\)表示行中第1個字元存到1號寄存器
^\
(.\)\1表示行首戀歌字元,且他們相同
cut -c5 file把file文件中沒行的第5個字元析取出來;
用逗號分割的數
值列表,如-c1,13,50把第1,13,50個字元析取出來
cut -c20-50把第20到50之間的字元析取出來

who | cut
-c1-8
who | cut -c1-8,18- 析取行中的第1到8個字元(用戶名)和第18到行尾的字元(登錄時間)
cut -ddchar
-ffields file其中,dchar是數據中分割各欄位的分割符,fields表示要從文件file中析取出來的欄位.

段編號從1開始,而且格式跟以前將的用來指定字元位置的數字一樣(如-f1、2、8、-f1-3、-f4-)。
cut -d: -f1
/etc/passwd
如果已知欄位之間使用製表符分隔的,就可以給cut命令用-f選項而不用-c選項,好多了!還記得吧,這里用不著用-d選
項來指定分割符,因為
cut把製表符默認為分割符。
paste和cut正好相反,它不是把行分離開,而是把多行合並在一起。
paste
names numbrs文件names中的每一行都和numbers中的對應行顯示在一起,中間用製表符分割。
如果不想用製表符作默認分割,
可以使用-dchars指定分割符
paste -d'+' names addresses numbers
-s選項告訴paste把同
一文件中的行粘貼在一起,而不是從其他文件。如果只指定一個文件名,其效果是把文件中的所有行合並成一行,原來隔行之間用製表符或者有-d選項指定的分割
符分割。
sed是用來編輯數據的程序,意指流編輯器(stream editor)。與ed不同,sed不能用於交互,
-n選
項,然後使用p命令顯式指定
sed -n '1,2p' file只顯示前2行
sed -n '/Unix/p'
file只列印包含Unix的行
刪除行
d刪除整行文件
sed '1,2d' file刪除1和2行
記住sed默認把輸入
的所有行寫入標准輸出,所以生於行的文字,也就是從第3行到結尾,都被寫入標准輸出。
sed '5d'刪除第5行
sed
'/[Tt]est/d'刪除包含test或Test的行
sed -n '20,25p' test只顯示文件test的第20行到第25行
sed
'1,10s/unix/UNIX/g' intro報intro前10行中的unix改為UNIX
sed
'/jan/s/-1/-5/'將所有包含jan的行中第1個-1改為-5
sed 's/...//'
data刪除data文件每一行的前3個字元
sed 's/...$//' data刪除data文件每一行的最後3個字元
sed -n 'I'
text顯示文件text的所有行,把所有不可列印字元顯示為\nn,製表符顯示為\t
過濾器tr用來轉換來自標准輸入的字
符,tr命令的一般格式為
tr from-chars to-chars
tr e x <
intro把所有字母e轉換成x
tr命令的輸入必須重定向到文件intro,因為tr總是從標准輸入獲得輸入;轉換的結果寫入標准輸出,而原始文
件保持不變。
cut -d: -f1,6 /etc/passwd | tr : ' '
通過在管道線的最後加上適當的tr命令,就可以把冒號轉換成製表符,這樣產生的輸出更容易看
單引號中括的是製表符(盡管你看不到)。必須將它括在
引號中,以便穿過shell,使tr有機會看到它。
使用\nnn來給tr提供8進製表示的字元
一些ascii字元的八進制值
響 鈴
7
退格 10
製表符 11
新行 12
換行 12
換頁 14
回 車
15
轉義 33
date | tr ' ' '\12'此例中,tr接受date命令的輸出,並把所有的空格轉換成換行
tr
'[a-z]' '[A-Z]'
<intro將所有小寫轉換為大寫
-s選項,tr命令中的-s選項用來壓縮to-chars中重復的字元,換句話說,如果轉換完成後,有
to-chars中的某個字元連續出現多次,則這些連續相同的字元被替換為一個字元。
如下面的命令將冒號轉換為製表符,並將多個連續製表符替換為
單個製表符:
tr -s ':' '\11\'
tr -s ' ' ' '
<lotspaces通過-s將多個空格全部壓縮為單個空格
-d選項用來刪除掉輸入流中的字元,其一般格式為
tr -d
from-chars任何列在from-chars中的字元都會被從標准輸入中刪除。下例用tr來刪除文件intro中的所有空格:
tr -d ' '
<intro
當然sed 's/ //g' intro也可以得到同樣的效果
tr 'X' 'x' 把大X專成小x
tr '()'
'{}' 把所有左小括弧轉換成左大括弧,右小括弧專成右大括弧
tr '[a-z]' '[A-Z]' 把小寫轉大寫
tr '[A-Z]'
'[N-ZA-M]' 把A-M字母分別專成N-Z把N-Z轉成A-M
tr ' ' ''把所有製表符轉換成空格
tr -s ' '
''把多個空格轉換成單個空格
tr -d '\14' 刪除所有換頁字元(八進制14)
tr -d '[0-9]'刪除所有數字
grep
'[A-Z]' list list中包含一個大寫字母的行
grep '[0-9]' data中包含數字的行
grep '[A-Z]...[0-9]'
list list中包含以大寫字母開始、數字結尾的5個字元組合的行
grep '\.pic$' filelist
filelist中以.pic結尾的行
uniq in_file
out_file該格式中,uniq把in_file復制到out_file,處理過程中,去掉其中的重復行。如果不指定第2個參數out_file,結
果就寫入標准輸出;如果in_file沒有指定,那麼uniq就成了一個過濾器,從標准輸入讀取輸入。
>或<
重定向,覆蓋原有的內容
>>或<< 重定向,想文件末尾追加內容
tee 顯示在終端上的內容存儲到文件 ls |
tee >glx
-d 目錄
-e 存在
-f 普通文件
-r 進程可讀文件
-s 長度不為0
-w
進程可寫文件
-x 可執行
-L 鏈接文件
$# 傳給程序的參數個數,或者執行set命令設置的參數個數
$*
對位置參數等的集中引用
$@ 跟$*相似,區別在於當加入雙引號後("$@"),集中引用位置參數"$1","$2"...等
$0
正執行的程序名
$$ 正執行程序的進程id
$! 最後一個發生後台運行的程序的進程id
$? 最後一個在前台執行的程序的退出狀態
$-
當前有效選項標志
`command`符號之間的內容為需要執行的命令
make -C /lib/moles/`uname -r`/build
M=`pwd`
使用echo可以顯示字元串,但是不能格式化字元串,可以使用printf實現
printf "format" arg1 arg2
...
ln -s from to 把from鏈接到to上,所以to是from的符號鏈接
tree -d只顯示目錄
tree -L
2顯示2級目錄
字元串比較
s1 = s2 s1等於s2
s1 != s2 s1不等於s2
s1
s1不為空
-n s1 s1不為空
-z s1 s1為空
整數比較操作
-eq 等於
-ge
大於或等於
-gt 大於
-le 小於或等於
-lt 小於
-ne 不等於
[ "$x1" = 5 ]字元串比較
[
"$x1" -eq 5 ]整數比較
-a 邏輯與操作
-o 邏輯或操作
command1 &&
command2
則先執行command1,如果返回的退出狀態
為0,則執行command2;如果command1返回的退出狀態非0,則跳過command2
command1 ||
command2
和上邊的&&差不多,只是,僅僅當command1返回非0時,才執行command2
#!/bin/sh
append2=0
include_lib=1
if
[ -f cscope_i ];then
rm cscope_i
fi
for cscope_file in $*; do

if [ -f "$cscope_file" ] || [ -d "$cscope_file" ];then
# if [
$cscope_file = '-a' ];then
# append2=1
# continue
#
fi
#
# if [ $cscope_file = '-n' ];then
#
include_lib=0<F11>
# continue
# fi
if [ "$append2" = "1"
];then
find $cscope_file -maxdepth 1 -name '*.[cChH]' -o -name
'*.[cC][pP][pP]'>>cscope_i
else
find $cscope_file -name
'*.[cChH]' -o -name '*.[cC][pP][pP]'>>cscope_i
fi
else
if [
$cscope_file = '-a' ];then
append2=1
elif [ $cscope_file = '-n'
];then
include_lib=0
else
echo "Error: cannot read file
$cscope_file"
fi
fi
done
if [ -f cscope_i ];then
if [
"$include_lib" = "1" ];then
cscope -bi cscope_i

else
cscope -bki cscope_i
fi
rm cscope_i
fi

#linux(ubuntu)

⑧ 標準的 sh 中如何判斷一個變數中是否含有某個字元串

比如變數是str
str="this is a string"
要想在判斷str中是否含有"this"這個字元串,下面的語句是可行的
[[ $str =~ "this" ]] && echo "\$str contains this"
[[ $str =~ "that" ]] || echo "\$str does NOT contain this"

其實這里就是用到了"[[" 判斷命令和 "=~"正則式匹配符號

⑨ 從字元串中刪除字元的方法

#include <stdio.h>
#include <conio.h>
void main()
{
char s[80],ch;
int i,j=0;
printf("Please input a string:");/*輸入一個字元串*/
gets(s);
printf("please input a character:"); /*輸入你想刪除的那個字元*/
ch=getchar();
for(i=0;s[i]!='\0';i++)
if(s[i]!=ch)
s[j++]=s[i];
s[j]='\0';
printf("%s\n",s);/*輸出刪除指定字元後的字元串*/
getch();
}
這樣你可以刪除任何你想刪除的字元。

⑩ shell 處理字元串

#!/bin/sh
while read line
do
sed 's/ =/ /g' >file.txt
done <22.TXT
試試

閱讀全文

與sh過濾字元串相關的資料

熱點內容
超濾凈水機廣告宣傳 瀏覽:602
沁園飲水機的智清潔怎麼用 瀏覽:934
醫療廢水每小時需要消毒液量 瀏覽:473
石灰水加什麼等於凈水 瀏覽:476
小型污水處理車 瀏覽:26
污水操作證是什麼單位出的 瀏覽:669
新款豐田凱美瑞汽油濾芯在什麼位置 瀏覽:346
凈水沙漏哪裡有做 瀏覽:278
汽油濾芯怎麼更換艾瑞澤5 瀏覽:416
制漿添加木粉對污水有什麼影響 瀏覽:837
懸掛馬桶水箱污水管離牆多少 瀏覽:236
h6原裝汽油濾芯是什麼品牌 瀏覽:672
白開水再次燒水垢 瀏覽:815
白醋搓洗水垢 瀏覽:556
凈水器過濾與吸附哪個作用好 瀏覽:768
機械加工的廢水處理工藝 瀏覽:817
寧波廢水處理設備廠 瀏覽:636
污水主管分管的規定坡度是多少 瀏覽:396
凈水器的水怎麼這么小 瀏覽:275
簡易污水處理廠的預算怎麼做 瀏覽:193