ฉันต้องการแทนที่สตริงในไฟล์จำนวนมากในโฟลเดอร์ที่มีssh
การเข้าถึงเซิร์ฟเวอร์เท่านั้น ฉันจะทำสิ่งนี้ได้อย่างไร
ฉันต้องการแทนที่สตริงในไฟล์จำนวนมากในโฟลเดอร์ที่มีssh
การเข้าถึงเซิร์ฟเวอร์เท่านั้น ฉันจะทำสิ่งนี้ได้อย่างไร
คำตอบ:
cd /path/to/your/folder
sed -i 's/foo/bar/g' *
การเกิดขึ้นของ "foo" จะถูกแทนที่ด้วย "บาร์"
ในระบบ BSD เช่น macOS คุณต้องให้ส่วนขยายการสำรองข้อมูลอย่าง-i '.bak'
อื่นหรือ "เสี่ยงต่อความเสียหายหรือเนื้อหาบางส่วน" ต่อ manpage
cd /path/to/your/folder
sed -i '.bak' 's/foo/bar/g' *
sed
, -i
ต้องสตริงหลังจากที่มันซึ่งถูกผนวกเข้ากับชื่อไฟล์เก่า ดังนั้นsed -i .bak 's/foo/bar/g' *.xx
ย้าย.xx
ไฟล์ทั้งหมดไปยัง.xx.bak
ชื่อเทียบเท่าแล้วสร้าง.xx
ไฟล์ที่มีการทดแทน foo → bar
sed -i 's/foo\ with\ spaces/bar/g' *
เช่น ฉันคิดว่าคุณรู้มานานแล้ว ... แต่วิธีนี้จะทำให้คนอื่นค้นพบปัญหาเดียวกัน
sed -i -e 's/foo/bar/g' $(find /home/user/base/dir)
คล้ายกับคำตอบของคาสปาร์ แต่ใช้แฟล็ก g เพื่อแทนที่เหตุการณ์ทั้งหมดในบรรทัด
find ./ -type f -exec sed -i 's/string1/string2/g' {} \;
สำหรับกรณีทั่วโลกที่ไม่สำคัญ:
find ./ -type f -exec sed -i 's/string1/string2/gI' {} \;
LC_ALL=C find ./ -type f -exec sed -i '' -e 's/proc.priv/priv/g' {} \;
(ดูโพสต์นี้และสิ่งนี้ )
--include=*.whatever
ด้วย -r
.git/
คุณอาจเสียหายได้ตั้งใจฐานข้อมูลใน อย่าลืมcd
ลงไปสู่ระดับที่ต่ำกว่า
git status
error: bad index file sha1 signature.... fatal: index file corrupt
สิ่งที่ช่วยให้?
คำตอบของ @ kev นั้นดี แต่มีผลกับไฟล์ในไดเรกทอรีทันทีตัวอย่างด้านล่างนี้ใช้ grep เพื่อค้นหาไฟล์ซ้ำ ๆ มันเหมาะกับฉันทุกครั้ง
grep -rli 'old-word' * | xargs -i@ sed -i 's/old-word/new-word/g' @
การแบ่งคำสั่ง
grep -r : -เรียกซ้ำอ่านไฟล์ซ้ำทั้งหมดภายใต้แต่ละไดเร็กทอรี
grep -l : - พิมพ์ด้วยการจับคู่พิมพ์ชื่อของแต่ละไฟล์ที่มีการจับคู่แทนการพิมพ์บรรทัดที่ตรงกัน
grep -i : ละเลยกรณี
xargs : แปลง STDIN เป็นอาร์กิวเมนต์ให้ทำตามคำตอบนี้
คำสั่ง xargs -i @ ~ มี @ ~ : ตัวยึดตำแหน่งสำหรับอาร์กิวเมนต์ที่จะใช้ในตำแหน่งเฉพาะในคำสั่ง ~ ~เครื่องหมาย @ เป็นตัวยึดตำแหน่งซึ่งสามารถแทนที่ด้วยสตริงใด ๆ
sed -i : แก้ไขไฟล์โดยไม่ต้องสำรองข้อมูล
sed s / regexp / ทดแทน / : แทนการจับคู่สายregexpกับการเปลี่ยน
seds / regexp / replace / g : globalทำการทดแทนสำหรับแต่ละการแข่งขันแทนการแข่งขันครั้งแรกเท่านั้น
grep --include={*.php,*.html,*.js} -rnl './' -e "old-word" | xargs -i@ sed -i 's/old-word/new-word/g' @
|
นั้นทำไม-i
ในคำสั่ง xargs ฉันอ่านในคู่มือมันเลิกใช้แล้วและควรใช้-I
แทน และ@
ใช้เป็นตัวคั่นสำหรับจุดเริ่มต้นและจุดสิ้นสุดสำหรับรูปแบบหรือไม่
grep -rli 'old-word' * | xargs -I@ sed -i '' 's/2.0.0/latest/g' @
rli
) บางตัวและ@
เครื่องหมายตัวอย่าง
สิ่งนี้ใช้ได้กับฉัน:
find ./ -type f -exec sed -i 's/string1/string2/' {} \;
howerver sed -i 's/string1/string2/g' *
นี้ไม่ได้: อาจจะ "foo" ไม่ได้หมายถึงเป็น string1 และ "bar" ไม่ใช่ string2
find ./ -type f -exec sed -i '' -e 's/string1/string2/' {} \;
มีคำตอบมาตรฐานสองสามข้อสำหรับรายการนี้แล้ว โดยทั่วไปแล้วคุณสามารถใช้ค้นหาไปยังรายการซ้ำไฟล์และจากนั้นจะดำเนินการกับsedหรือPerl
เพื่อการใช้งานที่รวดเร็วที่สุดคุณอาจพบว่าคำสั่งrplนั้นง่ายต่อการจดจำ นี่คือการแทนที่ (foo -> bar), ซ้ำในไฟล์ทั้งหมด:
rpl -R foo bar .
คุณอาจต้องติดตั้ง ( apt-get install rpl
หรือคล้ายกัน)
อย่างไรก็ตามสำหรับงานที่ยากขึ้นซึ่งเกี่ยวข้องกับการแสดงออกปกติและการทดแทนกลับหรือเปลี่ยนชื่อไฟล์เช่นเดียวกับการค้นหาและแทนที่เครื่องมือทั่วไปและทรงพลังที่สุดที่ฉันรู้คือreprenสคริปต์ Python ขนาดเล็กที่ฉันเขียนกลับมาบางส่วน การเปลี่ยนชื่อและการเปลี่ยนโครงสร้างงานใหม่ เหตุผลที่คุณอาจชอบ:
ที่จะใช้มัน, pip install repren
. ตรวจสอบ READMEสำหรับตัวอย่าง
ในการแทนที่สตริงในหลายไฟล์คุณสามารถใช้:
grep -rl string1 somedir/ | xargs sed -i 's/string1/string2/g'
เช่น
grep -rl 'windows' ./ | xargs sed -i 's/windows/linux/g'
ในการแทนที่เส้นทางภายในไฟล์ (หลีกเลี่ยงอักขระเลี่ยง) คุณอาจใช้คำสั่งต่อไปนี้:
sed -i 's@old_path@new_path@g'
เครื่องหมาย @ หมายความว่าควรละเว้นอักขระพิเศษทั้งหมดในสตริงต่อไปนี้
ในกรณีที่สตริงของคุณมีเครื่องหมายทับ (/) อยู่ข้างในคุณสามารถเปลี่ยนตัวคั่นเป็น '+'
find . -type f -exec sed -i 's+http://example.com+https://example.com+g' {} +
คำสั่งนี้จะทำงานซ้ำในไดเรกทอรีปัจจุบัน
../domain.com
ถึงdomain.com
บรรทัดแรกของ "foo" จะถูกแทนที่ด้วย "bar" และคุณสามารถใช้บรรทัดที่สองเพื่อตรวจสอบ
grep -rl 'foo' . | xargs sed -i 's/foo/bar/g'
grep 'foo' -r * | awk -F: {'print $1'} | sort -n | uniq -c
grep -rl 'foo' . | xargs sed -i 's/foo/bar/g'
หากคุณมีรายการไฟล์ที่คุณสามารถใช้ได้
replace "old_string" "new_string" -- file_name1 file_name2 file_name3
หากคุณมีไฟล์ทั้งหมดคุณสามารถใช้
replace "old_string" "new_string" -- *
หากคุณมีรายการไฟล์ที่มีนามสกุลคุณสามารถใช้
replace "old_string" "new_string" -- *.extension
replace "old_string" "new_string" -- *.txt
replace
ยูทิลิตี้นี้ หากไม่มีข้อมูลนี้คำตอบนี้จะไม่สมบูรณ์
"คุณสามารถใช้ find และ sed แต่ฉันพบว่า perl บรรทัดเล็ก ๆ นี้ทำงานได้ดี
perl -pi -w -e 's/search/replace/g;' *.php
"(สกัดจากhttp://www.liamdelahunty.com/tips/linux_search_and_replace_multiple_files.php )
ผลลัพธ์ที่ดีที่สุดของฉันมาจากการใช้ Perl และ grep (เพื่อให้แน่ใจว่าไฟล์มีการแสดงออกการค้นหา)
perl -pi -w -e 's/search/replace/g;' $( grep -rl 'search' )
ให้คุณต้องการค้นหาสตริงsearch
และแทนที่ด้วยreplace
ไฟล์หลาย ๆ ไฟล์นี่คือสูตรทดสอบบรรทัดเดียวของฉัน :
grep -RiIl 'search' | xargs sed -i 's/search/replace/g'
คำอธิบาย grep ด่วน:
-R
- การค้นหาแบบเรียกซ้ำ-i
- ตัวพิมพ์เล็กและตัวพิมพ์ใหญ่-I
- ข้ามไฟล์ไบนารี (คุณต้องการข้อความใช่ไหม?)-l
- พิมพ์รายการง่าย ๆ เป็นเอาท์พุท จำเป็นสำหรับคำสั่งอื่น ๆเอาต์พุต grep จะถูกไพพ์ไปยัง sed (ผ่าน xargs) ซึ่งใช้เพื่อแทนที่ข้อความจริง การ-i
ตั้งค่าสถานะจะเปลี่ยนไฟล์โดยตรง ลบออกสำหรับโหมด "dry run"
ฉันได้ปรุงวิธีการแก้ปัญหาของตัวเองก่อนที่จะพบคำถามนี้ (และคำตอบ) ฉันค้นหาชุดค่าผสมต่าง ๆ ของ "แทนที่" "หลายอย่าง" และ "xml" เพราะนั่นเป็นแอปพลิเคชันของฉัน แต่ไม่พบชุดนี้โดยเฉพาะ
ปัญหาของฉัน: ฉันมีไฟล์ xml แบบสปริงพร้อมข้อมูลสำหรับกรณีทดสอบซึ่งมีวัตถุที่ซับซ้อน refactor บนซอร์สโค้ดจาวาเปลี่ยนคลาสจำนวนมากและไม่ได้ใช้กับไฟล์ข้อมูล xml ในการบันทึกข้อมูลกรณีทดสอบฉันจำเป็นต้องเปลี่ยนชื่อคลาสทั้งหมดในไฟล์ xml ทั้งหมดซึ่งกระจายอยู่ในหลายไดเรกทอรี ทั้งหมดในขณะที่บันทึกสำเนาสำรองของไฟล์ xml ดั้งเดิม (แม้ว่านี่ไม่ใช่สิ่งที่จำเป็นเนื่องจากการควบคุมเวอร์ชันจะช่วยฉันที่นี่)
ฉันกำลังมองหาชุดค่าผสมของfind
+ sed
เพราะมันใช้ได้กับฉันในสถานการณ์อื่น ๆ แต่ไม่สามารถใช้ทดแทนได้หลายรายการพร้อมกัน
จากนั้นฉันก็พบการถามการตอบสนองของ Ubuntuและมันช่วยให้ฉันสร้างบรรทัดคำสั่งของฉัน:
find -name "*.xml" -exec sed -s --in-place=.bak -e 's/firstWord/newFirstWord/g;s/secondWord/newSecondWord/g;s/thirdWord/newThirdWord/g' {} \;
และมันก็ทำงานได้อย่างสมบูรณ์แบบ (กรณีของฉันมีการเปลี่ยนได้หกแบบ) แต่โปรดทราบว่ามันจะสัมผัสไฟล์ * .xml ทั้งหมดภายใต้ไดเรกทอรีปัจจุบัน ด้วยเหตุนี้และหากคุณรับผิดชอบระบบควบคุมเวอร์ชันคุณอาจต้องการกรองก่อนและส่งต่อเฉพาะsed
ผู้ที่มีสตริงที่คุณต้องการเท่านั้น ชอบ:
find -name "*.xml" -exec grep -e "firstWord" -e "secondWord" -e "thirdWord" {} \; -exec sed -s --in-place=.bak -e 's/firstWord/newFirstWord/g;s/secondWord/newSecondWord/g;s/thirdWord/newThirdWord/g' {} \;
findstr /spin /c:"quéquieresbuscar" *.xml
มันจะมีประโยชน์
grep --include={*.php,*.html} -rnl './' -e "old" | xargs -i@ sed -i 's/old/new/g' @
ง่อยจริง ๆ แต่ฉันไม่สามารถรับคำสั่ง sed ใด ๆ ให้ทำงานบน OSX ได้ดังนั้นฉันจึงทำสิ่งที่โง่แทน:
:%s/foo/bar/g
:wn
^ - คัดลอกทั้งสามบรรทัดลงในคลิปบอร์ดของฉัน (ใช่รวมบรรทัดใหม่ที่ลงท้ายด้วย) จากนั้น:
vi *
และกด command-v ค้างไว้จนกระทั่งข้อความแจ้งว่าไม่มีไฟล์เหลืออยู่
ใบ้ ... hacky ... ที่มีประสิทธิภาพ ...
ใน MacBook Pro ฉันใช้สิ่งต่อไปนี้ (ได้รับแรงบันดาลใจจากhttps://stackoverflow.com/a/19457213/6169225 ):
sed -i '' -e 's/<STR_TO_REPLACE>/<REPLACEMENT_STR>/g' *
-i ''
จะทำให้แน่ใจว่าคุณไม่ได้สำรองข้อมูล
-e
สำหรับ regex ที่ทันสมัย
-e
แค่บอกว่า sed โทเค็นถัดไปคือคำสั่ง สำหรับนิพจน์ทั่วไปที่ขยายให้ใช้-E
แทน
ตัวแก้ไขสตรีมจะแก้ไขหลายไฟล์“ inplace” เมื่อเรียกใช้โดยใช้-i
สวิตช์ซึ่งใช้ไฟล์สำรองที่ลงท้ายด้วยอาร์กิวเมนต์ ดังนั้น
sed -i.bak 's/foo/bar/g' *
แทนที่foo
ด้วยbar
ในไฟล์ทั้งหมดในโฟลเดอร์นี้ แต่ไม่ได้ลงไปในโฟลเดอร์ย่อย อย่างไรก็ตามสิ่งนี้จะสร้าง.bak
ไฟล์ใหม่สำหรับทุกไฟล์ในไดเรกทอรีของคุณ ในการทำเช่นนี้ซ้ำสำหรับไฟล์ทั้งหมดในไดเรกทอรีนี้และไดเรกทอรีย่อยทั้งหมดคุณต้องมีผู้ช่วยเช่นfind
เพื่อสำรวจทรีไดเรกทอรี
find ./ -print0 | xargs -0 sed -i.bak 's/foo/bar/g' *
find
อนุญาตให้คุณ จำกัด เพิ่มเติมเกี่ยวกับไฟล์ที่จะแก้ไขโดยการระบุอาร์กิวเมนต์เพิ่มเติมเช่นfind ./ -name '*.php' -or -name '*.html' -print0
หากจำเป็น
หมายเหตุ: GNU sed
ไม่ต้องการไฟล์ที่สิ้นสุดsed -i 's/foo/bar/g' *
จะทำงานได้เช่นกัน FreeBSD sed
ต้องการส่วนขยาย แต่อนุญาตให้มีช่องว่างระหว่างนั้นsed -i .bak s/foo/bar/g *
ได้
สคริปต์สำหรับคำสั่ง multiedit
multiedit [-n PATTERN] OLDSTRING NEWSTRING
จากคำตอบของ Kaspar ฉันสร้าง bash script เพื่อยอมรับอาร์กิวเมนต์บรรทัดคำสั่งและเลือกที่จะ จำกัด ชื่อไฟล์ที่ตรงกับรูปแบบ บันทึกใน $ PATH ของคุณและทำการปฏิบัติการจากนั้นใช้คำสั่งด้านบน
นี่คือสคริปต์:
#!/bin/bash
_help="\n
Replace OLDSTRING with NEWSTRING recursively starting from current directory\n
multiedit [-n PATTERN] OLDSTRING NEWSTRING\n
[-n PATTERN] option limits to filenames matching PATTERN\n
Note: backslash escape special characters\n
Note: enclose STRINGS with spaces in double quotes\n
Example to limit the edit to python files:\n
multiedit -n \*.py \"OLD STRING\" NEWSTRING\n"
# ensure correct number of arguments, otherwise display help...
if [ $# -lt 2 ] || [ $# -gt 4 ]; then echo -e $_help ; exit ; fi
if [ $1 == "-n" ]; then # if -n option is given:
# replace OLDSTRING with NEWSTRING recursively in files matching PATTERN
find ./ -type f -name "$2" -exec sed -i "s/$3/$4/g" {} \;
else
# replace OLDSTRING with NEWSTRING recursively in all files
find ./ -type f -exec sed -i "s/$1/$2/" {} \;
fi
หากไฟล์มีเครื่องหมายแบ็กสแลช (โดยทั่วไปคือพา ธ ) คุณสามารถลองสิ่งต่อไปนี้:
sed -i -- 's,<path1>,<path2>,g' *
อดีต:
sed -i -- 's,/foo/bar,/new/foo/bar,g' *.sh (in all shell scripts available)
เพื่อรักษาโหนดภาษาอังกฤษส่วนบุคคลของฉันฉันเขียนสคริปต์ยูทิลิตี้ที่ช่วยในการแทนที่สตริงเก่า / ใหม่หลายคู่สำหรับไฟล์ทั้งหมดภายใต้ไดเรกทอรีซ้ำ
สตริงเก่า / ใหม่หลายคู่ได้รับการจัดการในแผนที่แฮช
dir สามารถตั้งค่าผ่านทางบรรทัดคำสั่งหรือตัวแปรสภาพแวดล้อม, แผนที่เป็นรหัสยากในสคริปต์ แต่คุณสามารถปรับเปลี่ยนรหัสที่จะโหลดจากไฟล์ถ้าจำเป็น
มันต้องทุบตี 4.2 เนื่องจากคุณสมบัติใหม่บางอย่าง
en_standardize.sh:
#! /bin/bash
# (need bash 4.2+,)
#
# Standardize phonetic symbol of English.
#
# format:
# en_standardize.sh [<dir>]
#
# params:
# * dir
# target dir, optional,
# if not specified then use environment variable "$node_dir_en",
# if both not provided, then will not execute,
# *
#
paramCount=$#
# figure target dir,
if [ $paramCount -ge 1 ]; then # dir specified
echo -e "dir specified (in command):\n\t$1\n"
targetDir=$1
elif [[ -v node_dir_en ]]; then # environable set,
echo -e "dir specified (in environment vairable):\n\t$node_dir_en\n"
targetDir=$node_dir_en
else # environable not set,
echo "dir not specified, won't execute"
exit
fi
# check whether dir exists,
if [ -d $targetDir ]; then
cd $targetDir
else
echo -e "invalid dir location:\n\t$targetDir\n"
exit
fi
# initial map,
declare -A itemMap
itemMap=( ["ɪ"]="i" ["ː"]=":" ["ɜ"]="ə" ["ɒ"]="ɔ" ["ʊ"]="u" ["ɛ"]="e")
# print item maps,
echo 'maps:'
for key in "${!itemMap[@]}"; do
echo -e "\t$key\t->\t${itemMap[$key]}"
done
echo -e '\n'
# do replace,
for key in "${!itemMap[@]}"; do
grep -rli "$key" * | xargs -i@ sed -i "s/$key/${itemMap[$key]}/g" @
done
echo -e "\nDone."
exit
การใช้คำสั่ง ack จะเร็วขึ้นมากเช่นนี้:
ack '25 Essex' -l | xargs sed -i 's/The\ fox \jump/abc 321/g'
นอกจากนี้หากคุณมีพื้นที่สีขาวในผลการค้นหา คุณต้องหลบหนี
ฉันให้ตัวอย่างสำหรับการแก้ไขข้อผิดพลาด shebang ทั่วไปในแหล่งหลาม
คุณสามารถลองใช้วิธี grep / sed นี่คืออันที่ทำงานกับ GNU sed และจะไม่ทำลาย repit คอมไพล์:
$ grep -rli --exclude '*.git*' '#!/usr/bin/python' . | xargs -I {} \
gsed -i '' -e 's/#!\/usr\/bin\/python/#!\/usr\/bin\/env python/' {}
หรือคุณสามารถใช้greptile :)
$ greptile -x .py -l -i -g '#!/usr/bin/env python' -r '#!/usr/bin/python' .
ฉันเพิ่งทดสอบบทแรกและข้อที่สองก็ใช้ได้เช่นกัน ระวังตัวละครในการหลบหนีฉันคิดว่ามันน่าจะง่ายกว่าถ้าใช้ greptile ในกรณีส่วนใหญ่ แน่นอนคุณสามารถทำสิ่งที่น่าสนใจมากมายกับ sed และมันอาจจะดีกว่าถ้าคุณใช้มันด้วย xargs
ฉันพบอันนี้จากโพสต์อื่น (จำไม่ได้ว่า) และในขณะที่ไม่หรูหราที่สุดมันง่ายและเป็นผู้ใช้ Linux มือใหม่ทำให้ฉันไม่มีปัญหา
for i in *old_str* ; do mv -v "$i" "${i/\old_str/new_str}" ; done
หากคุณมีช่องว่างหรืออักขระพิเศษอื่น ๆ ให้ใช้ \
for i in *old_str\ * ; do mv -v "$i" "${i/\old_str\ /new_str}" ; done
สำหรับสตริงในไดเรกทอรีย่อยให้ใช้ **
for i in *\*old_str\ * ; do mv -v "$i" "${i/\old_str\ /new_str}" ; done
คำสั่งด้านล่างสามารถใช้เพื่อค้นหาไฟล์ก่อนและแทนที่ไฟล์:
find . | xargs grep 'search string' | sed 's/search string/new string/g'
ตัวอย่างเช่น
find . | xargs grep abc | sed 's/abc/xyz/g'
มีวิธีที่ง่ายกว่าโดยใช้ไฟล์สคริปต์แบบง่าย:
# sudo chmod +x /bin/replace_string_files_present_dir
เปิดไฟล์ใน gedit หรือแก้ไขที่คุณเลือกฉันใช้ gedit ที่นี่
# sudo gedit /bin/replace_string_files_present_dir
จากนั้นในตัวแก้ไขวางต่อไปนี้ในไฟล์
#!/bin/bash
replace "oldstring" "newstring" -- *
replace "oldstring1" "newstring2" -- *
#add as many lines of replace as there are your strings to be replaced for
#example here i have two sets of strings to replace which are oldstring and
#oldstring1 so I use two replace lines.
บันทึกไฟล์ปิดgeditจากนั้นออกจากเทอร์มินัลของคุณหรือเพียงแค่ปิดมันแล้วเริ่มต้นเพื่อให้สามารถโหลดสคริปต์ใหม่ที่คุณเพิ่ม
นำทางไปยังไดเรกทอรีที่คุณมีไฟล์หลายไฟล์ที่คุณต้องการแก้ไข จากนั้นเรียกใช้:
#replace_string_files_present_dir
กด enter แล้วจะเป็นการแทนที่สตริงเก่าและoldstring1ในไฟล์ทั้งหมดที่มีสตริงที่ถูกต้องและสตริงที่ 1 ใหม่ตามลำดับ
มันจะข้ามไดเรกทอรีและไฟล์ทั้งหมดที่ไม่มีสตริงเก่า
สิ่งนี้อาจช่วยกำจัดงานพิมพ์ที่น่าเบื่อในกรณีที่คุณมีหลายไดเรกทอรีพร้อมไฟล์ที่จำเป็นต้องเปลี่ยนสตริง สิ่งที่คุณต้องทำคือนำทางไปยังแต่ละไดเรกทอรีเหล่านั้นแล้วเรียกใช้:
#replace_string_files_present_dir
สิ่งที่คุณต้องทำคือให้แน่ใจว่าคุณได้รวมหรือเพิ่มสตริงการแทนที่ทั้งหมดตามที่ฉันแสดงให้คุณเห็นด้านบน:
replace "oldstring" "newstring" -- *
ในตอนท้ายของไฟล์/ bin / replace_string_files_present_dir
หากต้องการเพิ่มสตริงแทนที่ใหม่เพียงแค่เปิดสคริปต์ที่เราสร้างขึ้นโดยพิมพ์ข้อความต่อไปนี้ในเทอร์มินัล:
sudo gedit /bin/replace_string_files_present_dir
ไม่ต้องกังวลเกี่ยวกับจำนวนสตริงแทนที่ที่คุณเพิ่มพวกเขาจะไม่มีผลหากไม่พบสตริงเก่า
.gitlab-ci.yml
หรือ a travis.yml
) ทุกรอบที่มีการเขียนสคริปต์เพื่อดำเนินการในภายหลังคือรูปแบบการต่อต้านเพราะคุณจะต้องสคริปต์การสร้างสคริปต์ (และฉันยุ่งมากเวลา)
$ แทนที่ "จาก" "ถึง" - `find / path / to / folder -type f`
(แทนที่ - ยูทิลิตี้แทนที่สตริงของระบบฐานข้อมูล MySQL)