国产 无码 综合区,色欲AV无码国产永久播放,无码天堂亚洲国产AV,国产日韩欧美女同一区二区

Linux:使用sed命令替換文件內(nèi)容實(shí)操及各種報(bào)錯(cuò)問題解決

這篇具有很好參考價(jià)值的文章主要介紹了Linux:使用sed命令替換文件內(nèi)容實(shí)操及各種報(bào)錯(cuò)問題解決。希望對大家有所幫助。如果存在錯(cuò)誤或未考慮完全的地方,請大家不吝賜教,您也可以點(diǎn)擊"舉報(bào)違法"按鈕提交疑問。

工作遇到需要在頁面一鍵操作,后端進(jìn)行自動(dòng)化運(yùn)維部署的事情,這里就用的了sed命令,linux的學(xué)問真的要花時(shí)間好好學(xué)習(xí)一番了!

Linux:使用sed命令替換文件內(nèi)容實(shí)操及各種報(bào)錯(cuò)問題解決
上面圖片是AI創(chuàng)作生成!如需咒語可私戳哦!


以下為實(shí)際工作簡化后描述

需求背景

簡要說明下流程
原來的流程: 每次新增連接服務(wù),都要進(jìn)行命令行操作-修改配置文件A,執(zhí)行啟動(dòng)腳本 。
全部需要公司運(yùn)維人員幫忙操作,且每次新增都需要人工重復(fù)操作

現(xiàn)在的流程:
1.提前一次性配置好環(huán)境變量文件B中的必要參數(shù)
2.后續(xù)就交給程序來操作
3.根據(jù)頁面輸入的信息替換shell模版C內(nèi)容;
4.讀取環(huán)境變量B參數(shù)替換shell模版C內(nèi)容;
5.shell模版文件C替換完參數(shù)開始執(zhí)行替換文件A的命令

可以發(fā)現(xiàn)這里需要大量替換shell文件內(nèi)容的操作,如果是設(shè)置好的模板內(nèi)容,其實(shí)容易替換操作(詳見:《java:自定義變量加載到系統(tǒng)變量后替換shell模版并執(zhí)行shell》),但是對于特定內(nèi)容的替換,還是sed命令會(huì)容易些。

sed命令介紹

sed 是一種幾乎可以應(yīng)用在所有 UNIX 平臺(tái)(包括 Linux)上的輕量級流編輯器。sed 有許多很好的特性。首先,它相當(dāng)小巧,通常要比你所喜愛的腳本語言小多倍。其次,因?yàn)?sed 是一種流編輯器,所以,它可以對如管道這樣的標(biāo)準(zhǔn)輸入中接收的數(shù)據(jù)進(jìn)行編輯。因此,無須將要編輯的數(shù)據(jù)存儲(chǔ)在磁盤上的文件中。因?yàn)榭梢暂p易將數(shù)據(jù)管道輸出到 sed,所以,將 sed 用作強(qiáng)大的 Shell 腳本中長而復(fù)雜的管道很容易。

sed 主要是用來將數(shù)據(jù)進(jìn)行選取、替換、刪除、新増的命令。如下是命令的語法:

sed [選項(xiàng)] '[動(dòng)作]' 文件名

常用選項(xiàng):

  • n:使用安靜(silent)模式。在一般sed 的用法中,所有來自 STDIN的資料一般都會(huì)被列出到螢?zāi)簧?。但如果加?-n 參數(shù)后,則只有經(jīng)過sed特殊處理的那一行(或者動(dòng)作)才會(huì)被列出來;
  • e: 直接在指令列模式上進(jìn)行 sed 的動(dòng)作編輯;
  • f :-f filename 則可以執(zhí)行 filename 內(nèi)的sed動(dòng)作。和 awk 命令的 -f 選項(xiàng)非常類似;
  • r:在 sed 中支持?jǐn)U展正則表達(dá)式;
  • i:直接修改讀取的文件內(nèi)容,而不是由屏幕輸出;

常用命令:

  • a \:新增,在當(dāng)前行后添加一行或多行。當(dāng)添加多行時(shí),除最后一行外,每行末尾需要用“\”代表數(shù)據(jù)未完結(jié);
  • c \:行替換,用c后面的字符串替換原數(shù)據(jù)行。當(dāng)替換多行時(shí),除最后一行外,每行末尾需用“\”代表數(shù)據(jù)未完結(jié);
  • i \:插入,在當(dāng)前行前插入一行或多行。當(dāng)插入多行時(shí),除最后一行外,每行末尾需要用“\”代表數(shù)據(jù)未完結(jié);
  • d:刪除,刪除指定的行;
  • p:打印,輸出指定的行,通常 p 會(huì)與參數(shù) sed -n 一起運(yùn)作;
  • s:字符串替換,用一個(gè)字符串替換另一個(gè)字符串。格式為“行范圍s/舊字串/新字串/g”(和Vim中的替換格式類似);

??:這里需要注意,sed 所做的修改并不會(huì)直接改變文件的內(nèi)容(如果是用管道符接收的命令的輸出,則連文件都沒有),而是把修改結(jié)果只顯示到屏幕上,除非使用"-i"選項(xiàng)才會(huì)直接修改文件。

sed命令實(shí)操

接下來的操作都以測試數(shù)據(jù)-sedTest.sh為例:
原始數(shù)據(jù)如下
Linux:使用sed命令替換文件內(nèi)容實(shí)操及各種報(bào)錯(cuò)問題解決

p:打印,輸出指定的行;

查-某行的數(shù)據(jù)

如只看第2行的數(shù)據(jù)
命令:

sed -n '2p' sedTest.sh

結(jié)果:
Linux:使用sed命令替換文件內(nèi)容實(shí)操及各種報(bào)錯(cuò)問題解決

查-連續(xù)某幾行的數(shù)據(jù)

如看從第2行到第4行的數(shù)據(jù)
命令:

sed -n '2,4p' sedTest.sh

結(jié)果:
Linux:使用sed命令替換文件內(nèi)容實(shí)操及各種報(bào)錯(cuò)問題解決

查-某行開始到最后一行的數(shù)據(jù)

如看從第2行到最后一行的數(shù)據(jù)
命令:

sed -n '2,$p' sedTest.sh

結(jié)果:
Linux:使用sed命令替換文件內(nèi)容實(shí)操及各種報(bào)錯(cuò)問題解決

查-包括關(guān)鍵字的所有行數(shù)據(jù)

如查詢包含關(guān)鍵字-abc的所有行數(shù)據(jù)
命令:

sed -n '/abc/p' sedTest.sh

結(jié)果:
Linux:使用sed命令替換文件內(nèi)容實(shí)操及各種報(bào)錯(cuò)問題解決

查-包括特殊關(guān)鍵字如$所在所有行

查詢包括關(guān)鍵字$所在所有行,使用反斜線\屏蔽特殊含義

命令:

sed -n '/\$/p' sedTest.sh

結(jié)果:
Linux:使用sed命令替換文件內(nèi)容實(shí)操及各種報(bào)錯(cuò)問題解決

上面的實(shí)操命令可以看出:

  1. 所有的動(dòng)作必須使用"單引號(hào)"包含;
  2. 在動(dòng)作中可以使用數(shù)字代表行號(hào),逗號(hào)代表連續(xù)的行范圍;
  3. 還可以使用" $ " 代表最后一行,如果動(dòng)作是"2,$p",則代表查看從第二行到最后一行。

刪(不改變原文件)

d:刪除,刪除指定的行;

刪-某行數(shù)據(jù)

如刪除第3行的數(shù)據(jù)
命令:

sed '3d' sedTest.sh

結(jié)果:
但其實(shí)要知道,刪除只是刪除的展示結(jié)果,實(shí)際上原文件并沒有任何改動(dòng),如下:
Linux:使用sed命令替換文件內(nèi)容實(shí)操及各種報(bào)錯(cuò)問題解決

增(不改變原文件)

a :新增,在當(dāng)前行后添加一行或多行;

增-某行后增加數(shù)據(jù)

如在第1行后增加數(shù)據(jù):YYDS
命令:

sed '1a YYDS' sedTest.sh

結(jié)果:
Linux:使用sed命令替換文件內(nèi)容實(shí)操及各種報(bào)錯(cuò)問題解決
當(dāng)然,剛開始執(zhí)行語句的時(shí)候出現(xiàn)了問題,報(bào)錯(cuò):sed: 1: "1a YYDS": command a expects \ followed by text,解決方法在下面

行替換(不改變原文件)

c :行替換,用c后面的字符串替換原數(shù)據(jù)行;

替換-某行數(shù)據(jù)

如替換第2行數(shù)據(jù)YYDS為:dddd
命令:

sed '2c dddd' sedTest.sh

結(jié)果:
Linux:使用sed命令替換文件內(nèi)容實(shí)操及各種報(bào)錯(cuò)問題解決

字符串替換(不改變原文件)

s:字符串替換,用一個(gè)字符串替換另一個(gè)字符串

//(要替換的字符串可以用正則表達(dá)式)
sed 's/要替換的字符串/新的字符串/g'   

字符串替換-某行的部分字符串

如替換123為:666
命令:

sed 's/123/666/g' sedTest.sh

結(jié)果:
Linux:使用sed命令替換文件內(nèi)容實(shí)操及各種報(bào)錯(cuò)問題解決

字符串替換(改變原文件)

s:字符串替換,用一個(gè)字符串替換另一個(gè)字符串,使用 “-i” 選項(xiàng)才會(huì)直接修改文件。

//(要替換的字符串可以用正則表達(dá)式)
sed -i 's/要替換的字符串/新的字符串/g'  

字符串替換-字符串

如替換123為:666
命令:

sed -i 's/123/666/g' sedTest.sh

結(jié)果:
Linux:使用sed命令替換文件內(nèi)容實(shí)操及各種報(bào)錯(cuò)問題解決

字符串替換-匹配字符串全部替換

如替換6為:5
命令:

sed -i 's/6/5/g' sedTest.sh

結(jié)果:
Linux:使用sed命令替換文件內(nèi)容實(shí)操及各種報(bào)錯(cuò)問題解決

字符串替換-每行第一個(gè)匹配的字符串替換

如每行第一次出現(xiàn)的5替換為:6
命令:

sed -i 's/5/6/' sedTest.sh

結(jié)果:
Linux:使用sed命令替換文件內(nèi)容實(shí)操及各種報(bào)錯(cuò)問題解決

字符串替換-只替換第一個(gè)匹配的字符串

0,/待替換內(nèi)容/s/待替換內(nèi)容/替換內(nèi)容/

如第一個(gè)匹配的5替換為:6
命令:

sed -i '0,/5/s/5/6/' sedTest.sh

結(jié)果:
Linux:使用sed命令替換文件內(nèi)容實(shí)操及各種報(bào)錯(cuò)問題解決

字符串替換-只替換第一行所有匹配的字符串

0,/待替換內(nèi)容/s/待替換內(nèi)容/替換內(nèi)容/g

如存在5的第一行所有的5替換為:6
命令:

sed -i '0,/5/s/5/6/g' sedTest.sh

結(jié)果:
Linux:使用sed命令替換文件內(nèi)容實(shí)操及各種報(bào)錯(cuò)問題解決

字符串替換-每次替換兩行且只替換第一個(gè)匹配的字符串

1,/待替換內(nèi)容/s/待替換內(nèi)容/替換內(nèi)容/

如替換兩行且只替換第一個(gè)匹配的ab為:yzh
命令:

sed -i '1,/ab/s/ab/yzh/' sedTest.sh

結(jié)果:
Linux:使用sed命令替換文件內(nèi)容實(shí)操及各種報(bào)錯(cuò)問題解決

文件修改

如修改文件內(nèi)容的yzh為:ddd

直接修改原文件

命令:

sed -i 's/yzh/ddd/g' sedTest.sh

結(jié)果:
Linux:使用sed命令替換文件內(nèi)容實(shí)操及各種報(bào)錯(cuò)問題解決
可以看到修改了原文件內(nèi)容,且沒有其他文件產(chǎn)生

修改文件內(nèi)容,備份并重命名原文件(原文件名為修改后的文件內(nèi)容)

命令:

sed -in-place -e 's/yzh/ddd/g' sedTest.sh

結(jié)果:
Linux:使用sed命令替換文件內(nèi)容實(shí)操及各種報(bào)錯(cuò)問題解決
可以看到修改了文件內(nèi)容,但是多出來一個(gè)文件sedTest.shn-place,并且該文件內(nèi)容是修改之前的內(nèi)容,所以是對修改前的文件備份
Linux:使用sed命令替換文件內(nèi)容實(shí)操及各種報(bào)錯(cuò)問題解決


問題

1. 報(bào)錯(cuò)-mac上遇到的錯(cuò)誤sed command a expects followed by text

在執(zhí)行增加語句時(shí)
Linux:使用sed命令替換文件內(nèi)容實(shí)操及各種報(bào)錯(cuò)問題解決

原因

由于mac系統(tǒng)與linux系統(tǒng)下sed用法的差異,(差異可自己在兩個(gè)系統(tǒng)用man命令查看幫助)

解決方法

1. mac上安裝gnu-sed

brew install gnu-sed

Linux:使用sed命令替換文件內(nèi)容實(shí)操及各種報(bào)錯(cuò)問題解決

2. 調(diào)整mac下sed的用法,使其與linux一致

alias sed=gsed

Linux:使用sed命令替換文件內(nèi)容實(shí)操及各種報(bào)錯(cuò)問題解決

3.問題解決,再次執(zhí)行會(huì)報(bào)錯(cuò)的語句就沒問題了

2. 報(bào)錯(cuò)-sed throws ‘bad flag in substitute command’

由于我這個(gè)問題無法復(fù)現(xiàn)了,也忘了當(dāng)時(shí)具體的情況了,這里就直接放我當(dāng)時(shí)解決參考的鏈接了

解決方法

sed 在替代命令中拋出“錯(cuò)誤標(biāo)志”----sed throws ‘bad flag in substitute command’

3. Sed命令中含有轉(zhuǎn)義字符的問題

在sed命令中有許多的字符都被轉(zhuǎn)義,比如\ , $,^,單雙引號(hào)還有點(diǎn)號(hào)等等,因此使用sed命令進(jìn)行字符串的匹配和修改的時(shí)候,字符串中如果含有轉(zhuǎn)義字符,很多情況下不能直接用字符本身表示。這時(shí)候可以使用反斜杠加上轉(zhuǎn)義字符的方法來輸出含轉(zhuǎn)義字符的字符串,但這一方法并不是對所有的轉(zhuǎn)義字符都有用,過程也較復(fù)雜。

如果你也遇到了類似的問題,那么可以參考這個(gè)鏈接:Sed命令中含有轉(zhuǎn)義字符的解決方法


由于做這個(gè)功能距今有幾個(gè)月的時(shí)間了,當(dāng)時(shí)具體遇到的問題,無法完全回想和復(fù)現(xiàn)了,就把當(dāng)時(shí)參考的鏈接放給大家參考吧,當(dāng)然如果有解決不了的問題,可以私信,我還是應(yīng)該可以幫忙解決一下的!文章來源地址http://www.zghlxwxcb.cn/news/detail-405880.html

到了這里,關(guān)于Linux:使用sed命令替換文件內(nèi)容實(shí)操及各種報(bào)錯(cuò)問題解決的文章就介紹完了。如果您還想了解更多內(nèi)容,請?jiān)谟疑辖撬阉鱐OY模板網(wǎng)以前的文章或繼續(xù)瀏覽下面的相關(guān)文章,希望大家以后多多支持TOY模板網(wǎng)!

本文來自互聯(lián)網(wǎng)用戶投稿,該文觀點(diǎn)僅代表作者本人,不代表本站立場。本站僅提供信息存儲(chǔ)空間服務(wù),不擁有所有權(quán),不承擔(dān)相關(guān)法律責(zé)任。如若轉(zhuǎn)載,請注明出處: 如若內(nèi)容造成侵權(quán)/違法違規(guī)/事實(shí)不符,請點(diǎn)擊違法舉報(bào)進(jìn)行投訴反饋,一經(jīng)查實(shí),立即刪除!

領(lǐng)支付寶紅包贊助服務(wù)器費(fèi)用

相關(guān)文章

  • sed 原地替換文件時(shí)遇到的趣事

    sed 原地替換文件時(shí)遇到的趣事

    哈嘍大家好,我是咸魚 在文章《三劍客之 sed》中咸魚向大家介紹了文本三劍客中的 sed sed 全名叫 stream editor ,流編輯器,用程序的方式來編輯文本 那么今天咸魚打算講一下我在用 sed 原地替換文件時(shí)遇到的趣事 有這么一個(gè)普通文件 test.txt ,內(nèi)容如下: link_test.txt 是一個(gè)軟鏈

    2024年02月06日
    瀏覽(21)
  • PyQt5實(shí)操及問題記錄

    PyQt5實(shí)操及問題記錄

    下載使用pip install即可 參考:跳轉(zhuǎn)地址 注意:program要用項(xiàng)目虛擬環(huán)境內(nèi)的目錄,不要用下載目錄 從external tool進(jìn)入Qt designer 新建窗體 三類窗口的區(qū)別: (1)、dialog有exec函數(shù),如果是dialog窗口,后邊的窗口是不可選的;這個(gè)dialog窗口只是為了給人們提供更好的可視化操作,

    2024年02月11日
    瀏覽(42)
  • linux 再文件夾目錄下,批量替換文件名、文件內(nèi)容字符串

    基本使用命令 具體使用命令方法 1.替換文件內(nèi)容 搜索當(dāng)前目錄下所有.DTA文件,并將文件中字符串\\\"string1\\\",替換為\\\"string2\\\" 2.替換文件名 搜索當(dāng)前目錄下所有.DTA文件,并將文件名中字符串\\\"string1\\\"替換為\\\"string2\\\". 3.批量替換文件內(nèi)容 該目錄及子目錄下所有文件,將文件中所有的字符

    2024年02月16日
    瀏覽(95)
  • linux中結(jié)合sed和grep的全局文本替換示例

    目錄 基本語法 實(shí)戰(zhàn)例 注意點(diǎn) sed -i \\\"s/oldstring/newstring/g\\\"?`grep oldstring -rl path`? ? ? ? ? -i 表示inplace edit,就地修改文件 ? ? ? ? -r 表示遞歸式地搜索子目錄 ? ? ? ? -l 表示輸出匹配的文件名 ? ? ? ? oldstring:原字符串 ? ? ? ? newstring:要替換成為的新字符串 ? ? ? ? path:

    2024年02月08日
    瀏覽(78)
  • K-NN算法實(shí)操及介紹

    K-NN算法實(shí)操及介紹

    在模式識(shí)別領(lǐng)域中, 最近鄰居法 ( KNN 算法,又譯 K-近鄰算法 )是一種用于分類和回歸的非參數(shù)統(tǒng)計(jì)方法[1],由美國統(tǒng)計(jì)學(xué)家伊芙琳·費(fèi)克斯和小約瑟夫·霍奇斯于1951年首次提出,后來由托馬斯·寇弗擴(kuò)展。在這兩種情況下,輸入包含特征空間中的 k 個(gè)最接近的訓(xùn)練樣本。

    2024年04月09日
    瀏覽(16)
  • Linux CentOS7sed的替換及逆轉(zhuǎn)功能

    Linux CentOS7sed的替換及逆轉(zhuǎn)功能

    在各項(xiàng)工作中,需要大量的文本處理。有時(shí),想把文件按行翻轉(zhuǎn)一下,最后一行顯示在第一行,倒數(shù)第二行顯示在正數(shù)第二行,等等。這是對行的逆轉(zhuǎn)要求,可以通過命令tac對文件操作,達(dá)到目的;有時(shí),想把一行內(nèi)容按單詞翻轉(zhuǎn)一下,最后一個(gè)單詞顯示第一個(gè)位置,倒數(shù)第

    2024年02月10日
    瀏覽(23)
  • Linux文件編輯、替換的常用命令

    Linux文件編輯、替換的常用命令

    參考上圖: 在bin文件夾對應(yīng)的第一個(gè)參數(shù)是d,d 在 Linux 中代表該文件是一個(gè)目錄文件。 在 Linux 中第一個(gè)字符代表這個(gè)文件是目錄、文件或鏈接文件等等。 說明: 當(dāng)為 d 則是目錄; 當(dāng)為 - 則是文件; 若是 l 則表示為鏈接文檔(link file); 若是 b 則表示為裝置文件里面的可供

    2024年02月03日
    瀏覽(22)
  • 【Linux】linux下使用命令修改jar包內(nèi)某一個(gè)文件中的內(nèi)容并重新運(yùn)行jar程序

    【Linux】linux下使用命令修改jar包內(nèi)某一個(gè)文件中的內(nèi)容并重新運(yùn)行jar程序

    需求:發(fā)現(xiàn)線上的 iotp-irsb-server-v1.0.0.2.jar 包中配置文件的日志級別配置錯(cuò)誤,需要在線修改jar包中文件的application-prod.yml的日志級別配置,修改完成后并重啟該jar包。 進(jìn)入到該jar包所在的目錄,使用 vi 命令打開 jar 包內(nèi)文件列表。 1、vi iotp-irsb-server-V1.0.0.2.jar 如下圖所示:

    2024年02月08日
    瀏覽(21)
  • sed中使用正則表達(dá)式進(jìn)行替換以及注意事項(xiàng)

    sed中使用正則表達(dá)式進(jìn)行替換的時(shí)候,一定要注意,有些特殊字符在使用時(shí)要轉(zhuǎn)義,目前發(fā)現(xiàn)的有: 用于分組的小括號(hào):(),在使用時(shí)要用進(jìn)行轉(zhuǎn)義,但是匹配字符串中真正的小括號(hào)時(shí),無需轉(zhuǎn)義; 表示前面的表達(dá)式出現(xiàn)次數(shù)的{},也要轉(zhuǎn)義; 表示前面的表達(dá)式出現(xiàn)1次或多

    2023年04月22日
    瀏覽(24)
  • 【Linux】磁盤分區(qū)與永久掛載,實(shí)操模擬損壞文件系統(tǒng),只要一個(gè)命令即可修復(fù)?。?!

    【Linux】磁盤分區(qū)與永久掛載,實(shí)操模擬損壞文件系統(tǒng),只要一個(gè)命令即可修復(fù)?。?!

    目錄 一、磁盤基礎(chǔ)內(nèi)容 1、了解扇區(qū)的大小,以及與塊的關(guān)系 2、磁盤的第一個(gè)扇區(qū)的內(nèi)容 二、在Linux中使用硬盤的三大步驟 1、分區(qū) ----分區(qū)的作用:提高硬盤的性能 ----分區(qū)的命令 ----分區(qū)的分類: ----實(shí)操分區(qū)實(shí)驗(yàn) 2、創(chuàng)建文件系統(tǒng) ----文件系統(tǒng)類型: ----創(chuàng)建文件系統(tǒng)的命

    2024年02月04日
    瀏覽(55)

覺得文章有用就打賞一下文章作者

支付寶掃一掃打賞

博客贊助

微信掃一掃打賞

請作者喝杯咖啡吧~博客贊助

支付寶掃一掃領(lǐng)取紅包,優(yōu)惠每天領(lǐng)

二維碼1

領(lǐng)取紅包

二維碼2

領(lǐng)紅包