Как удалить ведущий пробел из каждой строки в файле

У меня есть файл, который выглядит примерно так:

for (i = 0; i < 100; i++)
    for (i = 0; i < 100; i++)
  for (i = 0; i < 100; i++)
       for (i = 0; i < 100; i++)
     for (i = 0; i < 100; i++)
           for (i = 0; i < 100; i++)
for (i = 0; i < 100; i++)

Я хочу, чтобы это было похоже на это (удалите добавления отступа):

for (i = 0; i < 100; i++)
for (i = 0; i < 100; i++)
for (i = 0; i < 100; i++)
for (i = 0; i < 100; i++)
for (i = 0; i < 100; i++)
for (i = 0; i < 100; i++)
for (i = 0; i < 100; i++)

Как это может быть сделано (использование sed возможно?)?

63
задан Peter Mortensen 2 April 2019 в 23:46
поделиться

4 ответа

PHP setcookie ()

С этой страницы будут отменены все файлы cookie для вашего домена:

// unset cookies
if (isset($_SERVER['HTTP_COOKIE'])) {
    $cookies = explode(';', $_SERVER['HTTP_COOKIE']);
    foreach($cookies as $cookie) {
        $parts = explode('=', $cookie);
        $name = trim($parts[0]);
        setcookie($name, '', time()-1000);
        setcookie($name, '', time()-1000, '/');
    }
}

http://www.php.net/manual/en/function.setcookie.php#73484

-121--780303-
$past = time() - 3600;
foreach ( $_COOKIE as $key => $value )
{
    setcookie( $key, $value, $past, '/' );
}

Тем не менее, лучше запомнить (или сохранить), какие файлы cookie набора с вашим приложением в домене, и удалить их напрямую.
Таким образом можно правильно удалить все значения.

-121--780304-
sed "s/^[ \t]*//" -i youfile

Предупреждение: исходный файл будет перезаписан.

114
ответ дан 24 November 2019 в 16:11
поделиться

Для этой конкретной проблемы может сработать что-то вроде этого:

$ sed 's/^ *//g' < input.txt > output.txt

Он говорит, что нужно заменить все пробелы в начале строки ничем. Если вы также хотите удалить табуляторы, измените его на следующее:

$ sed 's/^[ \t]+//g' < input.txt > output.txt

Начальная буква «s» перед / означает «замену». Знаки / являются разделителями шаблонов. Данные между первыми двумя / - это шаблон для сопоставления, а данные между вторым и третьим / - это данные для его замены. В этом случае вы ничего не заменяете. Буква «g» после последней косой черты означает «глобально», то есть: по всему файлу, а не только по первому найденному совпадению.

Наконец, вместо output.txt вы можете использовать параметр -i , который означает редактирование файла «на месте». Это означает, что вам не нужно создавать второй файл для хранения вашего результата. Если вы воспользуетесь этой опцией, вы потеряете исходный файл.

26
ответ дан 24 November 2019 в 16:11
поделиться

Вы можете использовать AWK:

$ awk '{$1=$1}1' file
for (i = 0; i < 100; i++)
for (i = 0; i < 100; i++)
for (i = 0; i < 100; i++)
for (i = 0; i < 100; i++)
for (i = 0; i < 100; i++)
for (i = 0; i < 100; i++)
for (i = 0; i < 100; i++)

sed

$ sed 's|^[[:blank:]]*||g' file
for (i = 0; i < 100; i++)
for (i = 0; i < 100; i++)
for (i = 0; i < 100; i++)
for (i = 0; i < 100; i++)
for (i = 0; i < 100; i++)
for (i = 0; i < 100; i++)
for (i = 0; i < 100; i++)

Цикл оболочки while/read

while read -r line
do
    echo $line
done <"file"
13
ответ дан 24 November 2019 в 16:11
поделиться

Вот, пожалуйста:

user@host:~$ sed 's/^[\t ]*//g' < file-in.txt

Или:

user@host:~$ sed 's/^[\t ]*//g' < file-in.txt > file-out.txt
0
ответ дан 24 November 2019 в 16:11
поделиться
Другие вопросы по тегам:

Похожие вопросы: