[英]delete first two char from each line in text file -sed
我正在使用執行sed的PHP文件:
shell_exec("C:\\cygwin64\\bin\\bash.exe --login -c 'sed -i -r \'s/.{2}//\' $text_files_path/File.txt 2>&1'");
該語句將從file.txt中刪除前2個字符。 如何從文件的每一行中刪除前2個字符?
File.text:
< TTGCATGCAAAAATTT
< AAAAAAATTTTGCTGA
< AAGGTTCCCCCTTAGT
編輯1:
shell_exec("C:\\cygwin64\\bin\\bash.exe --login -c 'sed -i -r 's/^..//' $text_files_path/File.txt 2>&1'");
這可行,但是它將所有行連接在一起:上面命令后的File.text:
TTGCATGCAAAAATTTAAAAAAATTTTGCTGAAAGGTTCCCCCTTAGT
如果只想使用PHP,則可以將文件explode()
分成幾行,然后使用substr()
刪除前兩個字符,然后再將這些行連接回以新行分隔的單個字符串中:
// Set the results array.
$result = array();
// Split the file into lines.
$file = $text_files_path . '/File.txt';
$lines = explode("\n", $file);
// Cut the first two characters of each line and add to the results array.
foreach($lines AS $line) {
$result[] = substr($line, 2);
}
// Split the result back into lines.
$result = implode("\n", $result);
s/^..//
應該可以為您提供所需的結果。
^
指向行的開頭,然后指向.
將匹配任何字符
請不要通過bash調用sed來執行PHP可以原生執行的操作。 這是一個完整的反模式。 令人擔憂的是,最近我在另一個問題中看到了完全相同的東西...
我希望您有足夠的可用磁盤空間:
$input_filename = "$text_files_path/File.txt";
$output_filename = 'path/to/temp/output.txt';
$input_file = fopen($input_filename, 'rb');
$output_file = fopen($output_filename, 'wb');
while (($line = fgets($input_file)) !== false) {
fwrite($output_file, substr($line, 2));
}
fclose($input_file);
fclose($output_file);
rename($output_filename, $input_filename);
打開輸入文件進行讀取,並打開臨時輸出文件進行寫入。 在兩種情況下都使用二進制模式,以避免與不同系統上不同行尾相關的問題。
讀取輸入的每一行,並將第二個字符中的子字符串寫入臨時輸出。
關閉兩個文件,然后用臨時文件覆蓋輸入。
從技術上講,這實際上可以就地實現,但是生成的腳本會復雜得多,如果出現問題,您將有進一步破壞輸入文件的風險。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.