Linux komut satırında birden çok dosyada bir dize nasıl değiştirilir


461

Sadece sshsunucuya erişim ile bir klasörde çok sayıda dosyada bir dize değiştirmek gerekiyor . Bunu nasıl yapabilirim?

Yanıtlar:


602
cd /path/to/your/folder
sed -i 's/foo/bar/g' *

"Foo" oluşumu "bar" ile değiştirilir.

MacOS gibi BSD sistemlerinde, sayfa -i '.bak'başına "risk bozulması veya kısmi içerik" gibi bir yedekleme uzantısı sağlamanız gerekir .

cd /path/to/your/folder
sed -i '.bak' 's/foo/bar/g' *

13
Dizede boşluk veya özel karakterler varsa bu benim için işe yaramıyor gibi görünüyor. Bunun neden olabileceği hakkında bir fikriniz var mı, yoksa onlardan nasıl kaçmam gerekiyor? Teşekkürler!
Matthew Herbst

13
Benim sürümü için en az sed, -ieski dosya adlarını eklenir peşinden bir dize gerektirir. Böylece sed -i .bak 's/foo/bar/g' *.xxtüm .xxdosyaları eşdeğer .xx.bakisme taşır ve ardından .xxfoo → bar değiştirmeli dosyaları oluşturur .
Anaphory

24
Daha fazla seçenek aramak isteyen varsa, unix yığın değişiminde daha fazla kullanım durumunu kapsayan bir cevap vardır. Site unix.stackexchange.com/a/112024/13488
Reddy

19
@MatthewHerbst boşluk kaçmak için \ like kullanın sed -i 's/foo\ with\ spaces/bar/g' *. Sanırım çok uzun zaman sonra öğrendiniz ... ama bu şekilde başkaları da aynı sorunu buluyor.
manuelvigarcia

5
Özyinelemeli bir şey için aşağıdakileri deneyebilirsiniz. Dosyaların listesi çok büyükse çalışmaz. sed -i -e 's/foo/bar/g' $(find /home/user/base/dir)
Scot

244

Kaspar'ın cevabına benzer, ancak bir satırdaki tüm olayları değiştirmek için g bayrağıyla.

find ./ -type f -exec sed -i 's/string1/string2/g' {} \;

Global büyük / küçük harfe duyarlı olmayanlar için:

find ./ -type f -exec sed -i 's/string1/string2/gI' {} \;

23
OSX üzerindeyseniz ve desenleriniz nokta içeriyorsa ve yerinde değiştirme yapmak istiyorsanız (yedek dosya yoksa) kullanmalısınız LC_ALL=C find ./ -type f -exec sed -i '' -e 's/proc.priv/priv/g' {} \;( bu gönderiye ve buna bakın )
Jonathan H

2
O -name "* .js" ile filtreleme sağladığından kesinlikle benim için çalıştı,
Marcello de Satış

1
Ayrıntılı bir seçenek harika olurdu, ancak değişikliklerin yapılıp yapılmadığını görmek için tekrar grep yapabilirsiniz. Not: Joker karakterler için, '-name "* .php"' yi deneyin ve grep özyineleme ve joker karakterlerle kötüdür, --include=*.whatever-r
PJ Brunet

12
Bunu, kullanıma alınmış bir Git deposunun kökünden yapmayın. İçindeki veritabanını yanlışlıkla bozabilirsiniz .git/. Daha cddüşük bir seviyeye inin.
erikprice

1
Sadece benim git repo bu yaptım ve şimdi git statusdöndürür: error: bad index file sha1 signature.... fatal: index file corrupt. Ne oluyor?
Jin

165

@ kev'in cevabı iyidir, ancak yalnızca hemen dizindeki dosyaları etkiler.Aşağıdaki örnekte, dosyaları yinelemeli olarak bulmak için grep kullanılır. Her zaman benim için çalışıyor.

grep -rli 'old-word' * | xargs -i@ sed -i 's/old-word/new-word/g' @

Komut dökümü

grep -r : --recursive , her dizinin altındaki tüm dosyaları tekrar tekrar oku.
grep -l : - eşleşmeli baskı, eşleşen satırları yazdırmak yerine eşleşmesi olan her dosyanın adını yazdırır.
grep -i : --ignore-case .

xargs : STDIN'i argümanlara dönüştürün, bu cevabı takip edin .
Xargs -i @ ~ komutu içerir @ ~ : bağımsız değişkeni için bir tutucu olarak belirli bir konumda kullanılacak ~ komutu ~ , 'işareti herhangi bir dize ile ikame olabilecek bir tutucudur.

-i sed , yerinde düzenleme dosyaları: olmadan yedeklemeler.
sed s / regexp / replacement / : regexp yerine yedek dize yazın .
sed s / regexp / replacement / g : global olarak , sadece ilk maç yerine her maçın yedeğini alın.


13
bu benim için işe yaramadı, ama bu işe yaradı:grep --include={*.php,*.html,*.js} -rnl './' -e "old-word" | xargs -i@ sed -i 's/old-word/new-word/g' @
Dennis

7
@pymarco Bu komutu açıklayabilir misiniz? Neden sadece sonra sed kullanmak yerine xargs kullanmak zorunda bilmiyorum |, ayrıca, neden -ixargs komutunda? Kullanım kılavuzunda kullanımdan kaldırıldığını ve -Ibunun yerine kullanılması gerektiğini okudum . Ve @desen için başlangıç ​​ve bitiş için bir sınırlayıcı olarak kullanılır?
Edson Horacio Junior

2
soru özellikle linux için.
pymarco

6
Osx'ta bu iyi:grep -rli 'old-word' * | xargs -I@ sed -i '' 's/2.0.0/latest/g' @
Philippe Sultan

1
Bazı seçeneklerden ( rli) ve @örneğin işaretini
bozmanız

37

Bu benim için çalıştı:

find ./ -type f -exec sed -i 's/string1/string2/' {} \;

Howerver, bu vermedi: sed -i 's/string1/string2/g' *. Belki "foo", string1 ve "bar" string2 değil.


1
Çünkü sed joker karakterlere * farklı davranır. [abc] *, {a, b, c} kümesinin isteğe bağlı sayıda karakteri ifade eder. [a-z0-9] * joker karakterle * benzer şekilde çalışır.
thepiercingarrow

8
OSX kullanımında:find ./ -type f -exec sed -i '' -e 's/string1/string2/' {} \;
Shaheen Ghiassy

32

Zaten listelenen bu sorunun birkaç standart cevabı vardır. Genellikle, dosyaları özyinelemeli olarak listelemek ve sonra sed veya perl ile işlemleri yapmak için find komutunu kullanabilirsiniz .

Çoğu hızlı kullanım için, rpl komutunun hatırlanması çok daha kolay olabilir. İşte tüm dosyalarda özyinelemeli değiştirme (foo -> bar):

rpl -R foo bar .

Muhtemelen yüklemeniz gerekir ( apt-get install rplveya benzeri).

Bununla birlikte, düzenli ifadeler ve geri değiştirme veya dosya adlarının yanı sıra arama ve değiştirme içeren daha zorlu işler için, farkında olduğum en genel ve güçlü araç repren , bazıları için bir süre geri yazdığım küçük bir Python betiği diken yeniden adlandırma ve yeniden düzenleme görevleri. Tercih etmenizin nedenleri:

  • Dosyaların yeniden adlandırılmasının yanı sıra dosya içeriğinde arama ve değiştirme desteği.
  • Aramayı gerçekleştirmeyi ve değiştirmeyi taahhüt etmeden önce değişiklikleri görün.
  • Geri ikame, tam kelimeler, büyük / küçük harfe duyarlı olmayan ve büyük / küçük harf koruyucusu (foo -> bar, Foo -> Bar, FOO -> BAR) modlarıyla düzenli ifadeleri destekleyin.
  • Takaslar (foo -> bar ve bar -> foo) veya benzersiz olmayan değiştirme setleri (foo -> bar, f -> x) dahil olmak üzere birden fazla yedekle çalışır.

Kullanmak için pip install repren. Örnekler için README'ye bakın.


1
Vay be, repren mükemmel! Sadece 1000+ C ++ üstbilgi ve kaynak dosyaları arasında dosyaları yeniden adlandırırken sınıf isimleri, yöntemler ve değişkenler içindeki bir kelimenin bir kısmını değiştirmek için kullanılır ve ilk kez tek bir komutla mükemmel çalıştı. Teşekkür ederim!
Bob Kocisko

29

Birden çok dosyadaki bir dizeyi değiştirmek için şunları kullanabilirsiniz:

grep -rl string1 somedir/ | xargs sed -i 's/string1/string2/g'

Örneğin

grep -rl 'windows' ./ | xargs sed -i 's/windows/linux/g'

Kaynak blog


20

Dosyalar içindeki bir yolu değiştirmek için (kaçış karakterlerinden kaçınmak) aşağıdaki komutu kullanabilirsiniz:

sed -i 's@old_path@new_path@g'

@ İşareti, tüm özel karakterlerin aşağıdaki dizede yok sayılması gerektiği anlamına gelir.


2
Diğer tüm cevaplarda aradığım şey tam olarak. Yani, yol olan bir dizeyi değiştirirken olduğu gibi özel karakterlerle nasıl başa çıkılacağı. Teşekkür ederim. Diğer cevaplarda büyük bir gözetim gibi görünüyordu.
inspirednz

19

Dizenizde eğik çizgi (/) varsa, sınırlayıcıyı '+' olarak değiştirebilirsiniz.

find . -type f -exec sed -i 's+http://example.com+https://example.com+g' {} +

Bu komut geçerli dizinde yinelemeli olarak çalışır.


Teşekkürler! Değiştireceğim referansları bir yük yardımcı oldu ../domain.comiçindomain.com
Jack Rogers

12

"Foo" nun ilk satır tekrarları "bar" ile değiştirilir. Ve kontrol etmek için ikinci satırı kullanabilirsiniz.

grep -rl 'foo' . | xargs sed -i 's/foo/bar/g'
grep 'foo' -r * | awk -F: {'print $1'} | sort -n | uniq -c

6
Blogunuza neden bağlanıyorsunuz? Cevabınızla tamamen aynı metni içerir.
DavidPostill

1
I likegrep -rl 'foo' . | xargs sed -i 's/foo/bar/g'
Prachi

10

Kullanabileceğiniz dosya listeniz varsa

replace "old_string" "new_string" -- file_name1 file_name2 file_name3

Tüm dosyalarınız varsa kullanabilirsiniz

replace "old_string" "new_string" -- *

Uzantısı olan dosya listeniz varsa şunu kullanabilirsiniz:

replace "old_string" "new_string" -- *.extension

2
aslında, "--file" sadece "-" olmalı, en azından benim versiyonumda
simpleuser

4
Bu yardımcı program MySQL paketleri içinde dağıtılır.
Dmitry Ginzburg

2
Gerçi, düzenli çizgiyi düzenli bir ifade olarak göstermeden çalışan çözümü takdir etmek isterim.
Dmitry Ginzburg

1
Bu iyi çalışır - ve örneğin ".txt" ile biten birden fazla dosyadaki tüm dizeleri değiştirmek istiyorsanız, bunu yapabilirsinizreplace "old_string" "new_string" -- *.txt
tsveti_iko

1
Bu replaceyardımcı programı nereden alacağınızı eklemek daha iyidir . Bu bilgi olmadan, bu cevap eksiktir.
Sitesh

9

Dizeyi aramak searchve onu replacebirden çok dosyayla değiştirmek istediğiniz göz önüne alındığında , bu benim savaş testli, tek satırlık formülüm :

grep -RiIl 'search' | xargs sed -i 's/search/replace/g'

Hızlı grep açıklaması:

  • -R - özyinelemeli arama
  • -i - büyük / küçük harfe duyarlı değil
  • -I - ikili dosyaları atla (metin istiyorsun, değil mi?)
  • -l- çıktı olarak basit bir liste yazdırın. Diğer komutlar için gerekli

Daha sonra grep çıktısı, metnin yerini almak için kullanılan sed'e (xargs aracılığıyla) geçirilir. -iBayrak dosyayı doğrudan değiştirecektir. Bir çeşit "kuru çalışma" modu için çıkarın.


8

"Bul ve sed'i de kullanabilirsiniz, ancak bu küçük perl çizgisinin güzel çalıştığını görüyorum.

perl -pi -w -e 's/search/replace/g;' *.php
  • -e, aşağıdaki kod satırını yürütmek anlamına gelir.
  • -i yerinde düzenleme anlamına gelir
  • -w yazma uyarıları
  • -p döngüsü

"( Http://www.liamdelahunty.com/tips/linux_search_and_replace_multiple_files.php sayfasından alınmıştır )

En iyi sonuçlarım perl ve grep kullanmaktan geliyor (dosyanın arama ifadesine sahip olmasını sağlamak için)

perl -pi -w -e 's/search/replace/g;' $( grep -rl 'search' )

4

Bu soruyu (ve cevapları) bulmadan önce kendi çözümümü hazırladım. Ben "benim uygulama", çünkü "yerine" "birkaç" ve "xml" farklı kombinasyonları aradım, ama bu belirli bir bulamadık.

Benim sorunum: Test nesneleri için karmaşık nesneler içeren verilerle bahar xml dosyaları vardı. Java kaynak kodundaki bir refactor birçok sınıfı değiştirdi ve xml veri dosyalarına uygulanmadı. Test senaryoları verilerini kaydetmek için, çeşitli dizinlere dağıtılan tüm xml dosyalarındaki tüm sınıf adlarını değiştirmem gerekiyordu. Tüm orijinal xml dosyalarının yedek kopyalarını kaydederken (bu bir zorunluluk olmamasına rağmen, sürüm kontrolü beni burada kurtaracaktır).

find+ ' Nın bir kombinasyonunu arıyordum sed, çünkü başka durumlarda benim için çalıştı, ancak aynı anda birkaç değişiklikle değil.

Sonra ask ubuntu yanıt buldum ve benim komut satırı oluşturmak yardımcı oldu:

find -name "*.xml" -exec sed -s --in-place=.bak -e 's/firstWord/newFirstWord/g;s/secondWord/newSecondWord/g;s/thirdWord/newThirdWord/g' {} \;

Ve mükemmel çalıştı (iyi, benim durumumda altı farklı yedek vardı). Ancak, geçerli dizinin altındaki tüm * .xml dosyalarına dokunacağını lütfen unutmayın. Bu nedenle, ve bir sürüm kontrol sisteminden sorumlu iseniz, önce filtrelemek isteyebilirsiniz ve sadece sedgerçekten istediğiniz dizelere sahip olanlara geçmek isteyebilirsiniz; sevmek:

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' {} \;

ve pencereler için, sadece bir komutta - nasıl değiştirileceğini henüz kontrol etmedim - dizeyi bulmanın bir yolu olduğunu öğrendim: findstr /spin /c:"quéquieresbuscar" *.xml Bu kullanışlı olacaktır.
manuelvigarcia

3
grep --include={*.php,*.html} -rnl './' -e "old" | xargs -i@ sed -i 's/old/new/g' @

3

Gerçekten topal, ama herhangi bir sed komutları OSX üzerinde çalışmak için alamadım, bu yüzden bunun yerine bu aptalca şey yaptım:

:%s/foo/bar/g
:wn

^ - bu üç satırı panoya kopyala (evet, bitiş satırını ekle), sonra:

vi *

ve hiçbir dosya kalmadığını söyleyene kadar command-v tuşunu basılı tutun.

Salak ... hacky ... etkili ...



2

Akış düzenleyicisi, -ianahtarla çağrıldığında birden çok dosyayı “inplace” üzerinde değiştirir; bu, argüman olarak biten bir yedekleme dosyasını alır. Yani

sed -i.bak 's/foo/bar/g' *

bu klasördeki tüm dosyalarda fooile değiştirilir bar, ancak alt klasörlere inmez. Ancak bu, .bakdizininizdeki her dosya için yeni bir dosya oluşturur . Bunu, bu dizindeki tüm dosyalar ve tüm alt dizinleri için yinelemeli olarak yapmak için find, dizin ağacında gezinmek için bir yardımcıya ihtiyacınız vardır .

find ./ -print0 | xargs -0 sed -i.bak 's/foo/bar/g' *

findfind ./ -name '*.php' -or -name '*.html' -print0gerektiğinde başka argümanlar belirterek hangi dosyaların değiştirileceği konusunda daha fazla kısıtlama yapmanızı sağlar .


Not: GNU sedbir dosya sonlandırması gerektirmez sed -i 's/foo/bar/g' *, aynı zamanda çalışacaktır; FreeBSD sedbir uzantı talep ediyor, ancak aralarında boşluk bırakıyor, bu yüzden sed -i .bak s/foo/bar/g *çalışıyor.


2

multiedit komutu için komut dosyası

multiedit [-n PATTERN] OLDSTRING NEWSTRING

Kaspar'ın cevabından komut satırı argümanlarını kabul etmek ve isteğe bağlı olarak bir desenle eşleşen dosya adlarını sınırlamak için bir bash betiği yaptım. $ PATH içine kaydedin ve çalıştırılabilir yapın, sonra yukarıdaki komutu kullanın.

İşte senaryo:

#!/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

1

Dosya ters eğik çizgi içeriyorsa (genellikle yollar) aşağıdaki gibi bir şey deneyebilirsiniz:

sed -i -- 's,<path1>,<path2>,g' *

örn:

sed -i -- 's,/foo/bar,/new/foo/bar,g' *.sh (in all shell scripts available)

1

Kişisel İngilizce düğümümü korumak için, bir dizinin altındaki tüm dosyalar için özyinelemeli olarak birden çok eski / yeni dizenin yerini almaya yardımcı olan bir yardımcı program komut dosyası yazdım.

Birden çok eski / yeni dize çifti karma haritada yönetilir.

Dizin komut satırı veya ortam değişkeni ile ayarlanabilir, harita kodda sabit olarak kodlanır, ancak gerekirse bir dosyadan yüklenecek kodu değiştirebilirsiniz.

Bazı yeni özelliklerden dolayı bash 4.2 gerektirir.

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

1

Ack komutunu kullanmak şöyle hızlı olur:

ack '25 Essex' -l | xargs sed -i 's/The\ fox \jump/abc 321/g'

Ayrıca, arama sonucunda boşluk varsa. Kaçmak zorundasın.


0

Python kaynaklarında ortak bir hata hatası düzeltmek için bir örnek veriyorum.

Grep / sed yaklaşımını deneyebilirsiniz. İşte GNU sed ile çalışan ve git deposunu bozmayacak bir tanesi:

$ grep -rli --exclude '*.git*' '#!/usr/bin/python' . | xargs -I {} \
gsed -i '' -e 's/#!\/usr\/bin\/python/#!\/usr\/bin\/env python/' {}

Veya greptile kullanabilirsiniz :)

$ greptile -x .py -l -i -g '#!/usr/bin/env python' -r '#!/usr/bin/python' .

Sadece ilk senaryoyu test ettim ve ikincisi de çalışmalı. Kaçış karakterlerine dikkat edin, çoğu durumda greptil kullanmanın daha kolay olması gerektiğini düşünüyorum. Tabii ki, sed ile birçok ilginç şey yapabilirsiniz ve bunun için xargs ile kullanmakta ustalaşmak tercih edilebilir.


0

Bunu başka bir gönderiden buldum (hangisini hatırlayamıyorum) ve en zarif olmasa da, basit ve acemi bir Linux kullanıcısı bana sorun vermedi

for i in *old_str* ; do mv -v "$i" "${i/\old_str/new_str}" ; done

boşluk veya başka özel karakterleriniz varsa, \

for i in *old_str\ * ; do mv -v "$i" "${i/\old_str\ /new_str}" ; done

alt dizinlerdeki dizeler için **

for i in *\*old_str\ * ; do mv -v "$i" "${i/\old_str\ /new_str}" ; done

0

Aşağıdaki komut, önce dosyaları aramak ve dosyaları değiştirmek için kullanılabilir:

find . | xargs grep 'search string' | sed 's/search string/new string/g'

Örneğin

find . | xargs grep abc | sed 's/abc/xyz/g'

0

Basit bir komut dosyası kullanmanın daha kolay bir yolu vardır:

   # sudo chmod +x /bin/replace_string_files_present_dir

dosyayı gedit veya seçtiğiniz bir düzenleyicide açın, burada gedit kullanıyorum.

   # sudo gedit /bin/replace_string_files_present_dir

Sonra editörde aşağıdakileri dosyaya yapıştırın

   #!/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.

Dosyayı kaydedin, gedit'i kapatın , sonra terminalinizden çıkın veya kapatın ve eklediğiniz yeni komut dosyasını yükleyebilmek için başlatın.

Düzenlemek istediğiniz birden fazla dosyanızın bulunduğu dizine gidin. O zaman koş:

  #replace_string_files_present_dir

Basın girip bu otomatik yerini alacak oldstring ve oldstring1 doğru bunları içeren tüm dosyalarda yeni-dizge argümanının ve newstring1 sırasıyla.

Eski dizeleri içermeyen tüm dizinleri ve dosyaları atlar.

Bu, dizenin değiştirilmesi gereken dosyalara sahip birden fazla dizininiz olması durumunda sıkıcı yazma işini ortadan kaldırmaya yardımcı olabilir. Tek yapmanız gereken bu dizinlerin her birine gitmek, ardından çalıştırmak:

#replace_string_files_present_dir

Tek yapmanız gereken, yukarıda gösterdiğim gibi tüm değiştirme dizelerini eklediğinizden veya eklediğinizden emin olmaktır:

replace "oldstring" "newstring" -- *

/ bin / replace_string_files_present_dir dosyasının sonunda .

Yeni bir değiştirme dizesi eklemek için, terminalde aşağıdakileri yazarak oluşturduğumuz komut dosyasını açmanız yeterlidir:

sudo gedit /bin/replace_string_files_present_dir

Eklediğiniz değiştirme dizelerinin sayısı konusunda endişelenmeyin, eski dize bulunmazsa bunların hiçbir etkisi olmaz.


Genellikle, insanlar bash içinde "nasıl {{}} $ atar?" Sorusunu sorduklarında, bir komut dosyasına veya CI iş talimatına (a .gitlab-ci.ymlveya a diyelim travis.yml) dahil edilmesi için kompakt bir sürüm ister . Daha sonra yürütmek için bir komut dosyası yazma oluşan her dönüş bir anti-desen, o zaman komut dosyası oluşturma komut dosyası gerekir (ve ben çoğu zaman dağınık gider)
zar3bski

-4

$ replace "From" "To" - `bul / yol / klasör / klasör-tür f`

(replace - MySQL Veritabanı Sisteminin dize değiştirme yardımcı programı)

Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.