當前位置:首頁 » 網路管理 » shell腳本如何刪除帶有空格的行
擴展閱讀
webinf下怎麼引入js 2023-08-31 21:54:13
堡壘機怎麼打開web 2023-08-31 21:54:11

shell腳本如何刪除帶有空格的行

發布時間: 2022-06-16 17:23:49

1. shell腳本讀文件如何忽略空行和注釋行

可以通過sed命令,將空行和注釋行刪除掉。

1、以下面的文檔內容為例,#號開頭的是注釋,然後有很多空行,文檔名為1.tt。

2. 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)

3. shell中怎麼刪除文件中指定行的

1、刪除包含指定關鍵字的行:

sed -i '/hello/d' test_temp

[root@host]$ cat test_temp

world

123

4566

889

2、刪除指定行號的行

sed -i '2d' test_temp

[root@host]$ cat test_temp

world

4566

889

3、sed -i '1d' a.txt刪首行

4、sed -i '$d' b.txt刪尾行

5、sed -i 's/[ ]*//g' c.txt刪空格

6、sed -i '/^$/d' d.txt刪空行

7、sed -i 『/love/d』 a.txt刪包含string的行。

(3)shell腳本如何刪除帶有空格的行擴展閱讀:

shell 命令

常用命令:

cat 文件名 輸出文件內容到基本輸出(屏幕 or 加>fileName 到另一個文件)

cb 格式化源代碼

chmod //change mode,改變文件的許可權

cp

date 當前的時間和日期

echo $abc 在變數賦值之後,只需在變數前面加一個$去引用.

lint語法檢查程序

ls dir

man help

more type

查看磁碟空間狀況

ps 查看當前進程狀況

who 你的用戶名和終端類型

定義變數 name=abc? (bash/pdksh) || set name = abc (tcsh)

mkdir 創建目錄

rmdir 刪除目錄

cd 進入目錄

rm 刪除文件

more 顯示文件

echo 顯示指定文本

mv 改文件名 /移動文件

pwd 顯示目錄路徑命令

4. shell腳本怎麼刪除含有空字元的行

sed'/x00/d'file


xnn 表示匹配 ASCII 值為16進制的 0xnn 的字元。所以上面的 x00 表示匹配值為 0x00 的字元,即你要的空字元。

5. shell sed 如何刪除多餘的空行

恩,樓上的可以刪除由回車形成的空行,但是如果由空格形成的空行就沒法刪除了。
#sed
-i
'/^
*$/d'
file
這個可以刪除由空格組成的空行,也包括由回車組成的空行。

6. 編寫一個shell腳本,刪除當前目錄下空文件

#!/bin/bash
#當前路徑
MYDIR=`dirname"$0"`
#切換到當前路徑
cd"$MYDIR"
#刪除當前文件夾下所有空文件夾
find"$MYDIR"-typed-execrmdir-p{};

#對於文件夾大小大於0的文件夾無效。
#$MYDIR加雙引號可以刪除帶空格的文件夾。

試試看這個代碼。

7. linux shell 問題,清除文件中的空格

先建腳本:clearspace.sh

給腳本添加執行許可權chmod+xclearspace.sh

編輯腳本內容:

  • touchtmpFile #建臨時文件

  • sed's///g'$1>temFile #seds命令將空格替換重定向到臨時文件

  • cattemFile>$1 #覆蓋原文件

  • rm-ftemFile #刪除臨時文件

  • echo'OK,DONE!'



執行腳本./clearspace.shsouceFile


實例:

執行前:

查看原文件:catsource.txt

sfdasasdala;aslasj8

890asfdf22

223rfa23rfa

asdf929322sdf

23423r4sdk;

,.';ds

sadfwow

sas sd

執行

./clearspace.shsource.txt

OK,DONE!

執行之後查看結果:catsource.txt

sfdasasdala;aslasj8

890asfdf22

223rfa23rfa

asdf929322sdf

23423r4sdk;

,.';ds

sadfwow

sassd

8. UNIX shell中如何去掉字元串中的空格

使用String對象的方法replaceAll就可以了! replaceAll(String regex, String replacement) 使用給定的 replacement 字元串替換此字元串匹配給定的正則表達式的每個子字元串。 示例代碼: public class T3 { public static void main(String arg

9. SHELL腳本中怎麼刪除連續多個空行卻保留一個。

試試這樣:

sed'/^$/d'input|awk'{print$0"
"}'>output

處理input文件。

首先用sed去掉所有空行,然後通過awk在逐行列印時再加上一個空行。

結果保存到output文件中。

10. shell trim 去掉字元串兩邊的空格,不去掉中間的 怎麼做

先建腳本:clearspace.sh給腳本添加執行許可權chmod+xclearspace.sh編輯腳本內容:touchtmpFile#建臨時文件sed's/\//g'$1>temFile#seds命令將空格替換重定向到臨時文件cattemFile>$1#覆蓋原文件rm-ftemFile#刪除臨時文