Заменить несколько повторяющихся строк пробелами в Notepad++

Заменить несколько повторяющихся строк пробелами в Notepad++

У меня есть такой текстовый файл:

eeeeeeee6fd6e6e7000000800010884f image_0001.png                                                   
eeeeeeee6fd6e6e7000000800010884f image_0002.png                                                   
e6eee7afef77c6c7000000808860003b image_0003.png                                                   
e6eeefa7cfe777170100000008886033 image_0004.png                                                   
e6eeefa7cfe777170100000008886033 image_0005.png                                                   
eeeecfe7afcfe7770100000030088c27 image_0006.png                                                   
efebefe7a7cfc7e70101080000300c03 image_0007.png                                                   
ef6befdf674f97c7000000900200301f image_0008.png                                                   
ef6befdf674f97c7000000900200301f image_0009.png                                                   
6d6d6faff767479700004008810000e1 image_0010.png                                                   
ed6d6dada5f767570000400098830401 image_0011.png                                                   
ed6d6dada5f767570000400098830401 image_0012.png                                                   
efed6d4da595f7a70202004000181303 image_0013.png                                                   
ebececcc2f2797f10000008051043c5b image_0014.png                                                   
e9edecce4e6e26ba120101808058042a image_0015.png                                                   
e9edecce4e6e26ba120101808058042a image_0016.png                                                   
ececeeefcf6f67a61000000080585887 image_0017.png                                                   
cc6ceeefcf4f67e710000020000149d8 image_0018.png                                                   
cc6cefefefcf6fe71000000040000001 image_0019.png                                                   
cc6cefefefcf6fe71000000040000001 image_0020.png                                                   
8ceceeefefcfcfe700000000c0000009 image_0021.png 

и я хотел бы использовать Notepad++, чтобы избавиться от всех, кроме одной, дублирующихся строк (значений хэша слева) и оставить эту часть строки пустой, сохранив имена файлов справа, например:

eeeeeeee6fd6e6e7000000800010884f image_0001.png                                                   
                                 image_0002.png                                                   
e6eee7afef77c6c7000000808860003b image_0003.png                                                   
e6eeefa7cfe777170100000008886033 image_0004.png                                                   
                                 image_0005.png                                                   
eeeecfe7afcfe7770100000030088c27 image_0006.png                                                   
efebefe7a7cfc7e70101080000300c03 image_0007.png                                                   
ef6befdf674f97c7000000900200301f image_0008.png                                                   
                                 image_0009.png                                                   
6d6d6faff767479700004008810000e1 image_0010.png                                                   
ed6d6dada5f767570000400098830401 image_0011.png                                                   
                                 image_0012.png 
...etc.

Конечно, есть много разных строк, которые нужно заменить, так что это не так просто, как можно было бы подумать (особенно для тысяч таких строк). Есть ли регулярное выражение или какой-либо другой способ сделать это? Спасибо

решение1

Есть много способов сделать это с помощью Python. Вот один из них:

# Note: Your output file must be different to your input file!
# Use absolute filepaths unless the files are in the current working directory.
input_filepath = r"C:\Users\Admin\Desktop\file hashes.txt"
output_filepath = r"C:\Users\Admin\Desktop\file hashes (processed).txt"

hashes = set() # This set keeps track of known file hashes
with open(input_filepath) as fin:
    with open(output_filepath, "w") as fout:
        # After opening both the input and output files,
        # loop over every line in the input file.
        for line in fin:
            # Get the hash, which is between the start of the line and the first space.
            file_hash = line[:line.find(" ")] 
            # Check if it is in the set of known hashes.
            # If it is, write the current line without the hash to the output file.
            # If it isn't, write the current line with the hash to the output file,
            # and add the hash to our set of known hashes
            if file_hash in hashes:
                hash_len = len(file_hash)
                fout.write(" " * hash_len + line[hash_len:])
            else:
                fout.write(line)
                hashes.add(file_hash)

file hashes (processed).txtвыглядит как:

eeeeeeee6fd6e6e7000000800010884f image_0001.png                                                   
                                 image_0002.png                                                   
e6eee7afef77c6c7000000808860003b image_0003.png                                                   
e6eeefa7cfe777170100000008886033 image_0004.png                                                   
                                 image_0005.png                                                   
eeeecfe7afcfe7770100000030088c27 image_0006.png                                                   
efebefe7a7cfc7e70101080000300c03 image_0007.png                                                   
ef6befdf674f97c7000000900200301f image_0008.png                                                   
                                 image_0009.png                                                   
6d6d6faff767479700004008810000e1 image_0010.png                                                   
ed6d6dada5f767570000400098830401 image_0011.png                                                   
                                 image_0012.png                                                   
efed6d4da595f7a70202004000181303 image_0013.png                                                   
ebececcc2f2797f10000008051043c5b image_0014.png                                                   
e9edecce4e6e26ba120101808058042a image_0015.png                                                   
                                 image_0016.png                                                   
ececeeefcf6f67a61000000080585887 image_0017.png                                                   
cc6ceeefcf4f67e710000020000149d8 image_0018.png                                                   
cc6cefefefcf6fe71000000040000001 image_0019.png                                                   
                                 image_0020.png                                                   
8ceceeefefcfcfe700000000c0000009 image_0021.png 

Я не уверен, как настроен Python в вашей системе, но вы сможете запустить его, скопировав приведенный выше код в файл с именем вроде remove_duplicate_hashes.py, а затем запустив его двойным щелчком или введя его python remove_duplicate_hashes.pyв командной строке.

Связанный контент