Opsi sed untuk menyimpan waktu file selama pencarian / ganti?

2

Saya mencoba untuk memodifikasi beberapa file Autotool karena proyek tidak menghormati saya CFLAGS, CXXFLAGSdan LDFLAGS. Saya menemukan beberapa area di mana saya bisa melakukan perubahan dengan grepfor libtool: link. Ketika saya men-tweak file Autotool:

$ sed -i "" 's|$CC -dynamiclib|$CC -dynamiclib -force_cpusubtype_ALL|g' configure configure.ac

Hasilnya:

WARNING: 'aclocal-1.14' is missing on your system.
         You should only need it if you modified 'acinclude.m4' or
         'configure.ac' or m4 files included by 'configure.ac'.
         The 'aclocal' program is part of the GNU Automake package:
         <http://www.gnu.org/software/automake>
         It also requires GNU Autoconf, GNU m4 and Perl in order to run:
         <http://www.gnu.org/software/autoconf>
         <http://www.gnu.org/software/m4/>
         <http://www.perl.org/>
make: *** [aclocal.m4] Error 127

touch -t 19700101 configure.ac tidak menyelesaikan masalah.

Saya menggunakan sistem OS X lama, dan tidak memiliki alat yang diinginkan oleh alat. Saya membuka sed(1)halaman manual , tetapi saya tidak melihat opsi untuk menghemat waktu file.

Bagaimana cara saya menginstruksikan seduntuk menghemat waktu file?

jww
sumber
sed -i '.bak' saya pikir tidak menyimpan file tetapi mendukungnya. Tetapi bagaimana dengan sed tanpa -i dan menggunakan redirect sed "s/a/b/" >file.b atau hanya cat file1|sed "s/a/b/" atau sed "s/a/b/" file.a Mereka membuang ke layar. Hanya sed -i yang akan menimpa file asli.
barlop

Jawaban:

1

sedtidak mungkin melakukan itu dalam implementasi apa pun. Perintah

touch -t 19700101 configure.ac

memberitahu touchuntuk mengatur cap waktu ke tanggal palsu (karena hanya 8 digit yang diberikan) menggunakan

  • MM = 19
  • DD = 70
  • jj = 01
  • mm = 01

Anda mungkin berniat

touch -t 197001010000 configure.ac

(8 digit untuk 19700101, ditambah 4 digit lebih banyak untuk 0000), meskipun Anda dapat mengalami masalah zona waktu dengan itu. Bagaimanapun, tidak mungkin mengatur ulang stempel waktu file sejauh ini diperlukan. Saya hanya akan mengatur ulang ke nilai asli.

Sebagai contoh (saya biasanya melakukan ini dengan cpd ), orang dapat menulis skrip untuk menyalin stempel waktu dari file asli ke file yang diedit. Berikut ini contoh skrip yang berfungsi untuk OSX:

#!/bin/sh
usage() {
    echo "usage: $0 source target" >&2
    exit 1
}

[ $# = 2 ] || usage

[ -L "$1" ] && usage
[ -L "$2" ] && usage

[ -f "$1" ] || usage
[ -f "$2" ] || usage

SOURCE=$(stat -t "%Y%m%d%H%M.%S" -f "%Sm" "$1")
ls -l $2
touch -t "$SOURCE" "$2"
ls -l $2

Cukup menarik (baris-perintah statyang tidak standar), versi OSX dari statlebih cocok untuk aplikasi tertentu daripada Linux stat. Untuk Linux, satu mungkin melakukan sesuatu yang mirip dengan mendapatkan cap dari sebuah ls -ldaftar, dan menggunakan non-standar -dpilihan touchuntuk menerapkan cap waktu.

Thomas Dickey
sumber
Hmmm .... Menurut halaman manual saya melihat: touch [-A [-][[hh]mm]SS] [-acfhm] [-r file] [-t [[CC]YY]MMDDhhmm[.SS]]. I (pikir) saya memberikan CC, YY, MMdan DD.
jww
CC dan YY adalah opsional, dan tidak digunakan sama sekali hanya ada 8 digit. Itulah yang ditunjukkan tanda kurung siku.
Thomas Dickey